1 ภาพรวมของคำสั่งลูป

ใน Go language, คำสั่งลูปช่วยให้เราสามารถ execute บล็อกโค้ดได้หลายครั้ง เมื่อคุณต้องการทำซ้ำการดำเนินการบางอย่าง คำสั่งลูปกลายเป็นสิ่งสำคัญมาก ตัวอย่างเช่น คุณอาจต้องการวนซ้ำผ่านทุกๆ element ในอาร์เรย์ หรือทำซ้ำการดำเนินการจนกว่าเงื่อนไขบางอย่างจะถูกทำครบ ใน Go, คำสั่งลูปส่วนใหญ่ถูกนำมาใช้โดยใช้คีย์เวิร์ด for ซึ่งเป็นเพียงคำสั่งลูปเดียวใน Go language การใช้คำสั่งลูปอย่างถูกต้องเป็นสิ่งสำคัญสำหรับเขียนโค้ดที่มีประสิทธิภาพและสามารถบำรุงรักษาได้

2 พื้นฐานของ for ลูป

2.1 โครงสร้างของ for ลูป

for ลูปใน Go language ประกอบด้วยส่วนที่สามประการ:

  1. คำสั่งการเริ่มต้น: ที่ทำงานก่อนการวนซ้ำครั้งแรก, โดยทั่วไปใช้สำหรับการประกาศตัวนับของลูป
  2. เงื่อนไขการเช็ค: ทำการประเมินก่อนทุกครั้งที่วนซ้ำ ถ้าเงื่อนไขเป็น true บล็อกโค้ดในลูปจะถูกทำงาน
  3. คำสั่งหลังบล็อกโค้ด: ทำงานหลังจากที่บล็อกโค้ดของการวนซ้ำทุกครั้ง, โดยทั่วไปใช้สำหรับการอัพเดทตัวนับของลูป

รูปแบบของ for ลูปมีดังนี้:

for คำสั่งการเริ่มต้น; เงื่อนไขการเช็ค; คำสั่งหลังบล็อกโค้ด {
    // บล็อกโค้ดของการวนซ้ำ
}

2.2 ตัวอย่างง่ายของ for ลูป

ในตัวอย่างนี้, ตัวแปร i ถูกเริ่มต้นที่ 0. for ลูปเช็คว่าเงื่อนไข i < 5 เป็น true หรือไม่ หากเงื่อนไขเป็นจริง, บล็อกโค้ดของลูปจะถูกทำงานและค่าของ i ถูกปริ้นท์ออกมา หลังจากที่บล็อกโค้ดถูกทำงาน, ค่าของ i ถูกอัพเดทโดย i++ (การเพิ่มค่า) และต่อมาลูปก็ทำการเช็คเงื่อนไขอีกครั้งจนกว่าค่าของ i จะถึงที่ 5, ณ เวลานั้นเงื่อนไขจะกลายเป็นเท็จและ for ลูปจะสิ้นสุด

2.3 ตัวอย่างอื่น ๆ ของ for ลูป

for ลูปใน Go language เป็นอย่างยืดหยุ่นและสามารถเขียนได้ในรูปแบบต่าง ๆ เพื่อจัดการกับสถานการณ์ที่แตกต่างกัน

2.3.1 ลูปไม่มีที่สิ้นสุด

ใน Go, คุณสามารถละคำสั่งการเริ่มต้น, เงื่อนไขการเช็ค, และคำสั่งหลังบล็อกโค้ดของ for ลูป, สร้างลูปที่ไม่มีที่สิ้นสุด ซึ่งจะวิ่งจนกว่าจะถูกหยุดโดยคำสั่ง break หรือค่าที่ถูกส่งกลับมาจากฟังก์ชัน

for {
    // โค้ดภายในลูปที่ไม่มีที่สิ้นสุด
    if เงื่อนไขบางอย่าง {
        break // ออกจากลูปเมื่อเงื่อนไขบางอย่างถูกทำครบ
    }
}

2.3.2 ลูปที่มีเพียงเงื่อนไขเดียว

ใน Go, คุณยังสามารถใช้ for ลูปที่มีเพียงเงื่อนไขเดียว, คล้ายกับ while ลูปในภาษาโปรแกรมอื่น ๆ

n := 0
for n < 5 {
    fmt.Println(n)
    n++
}

โค้ดข้างต้นจะปริ้นท์ค่า 0 ถึง 4, และลูปจะจบเมื่อ n ถึงที่ 5.

2.3.3 วนซ้ำผ่านอาร์เรย์หรือ slice

ใน Go, คำสั่งคีย์เวิร์ด range ถูกใช้เพื่อการทำงานโดยช่วยให้สามารถวนซ้ำผ่านทุกๆ element ของอาร์เรย์หรือ slice

items := []int{1, 2, 3, 4, 5}
for index, value := range items {
    fmt.Printf("Index: %d, Value: %d\n", index, value)
}

โค้ดข้างต้นจะปริ้นแสดงดัชนีและค่าของทุก element หากคุณมีความต้องการเพียงค่าของ element เท่านั้น, คุณสามารถใช้ _ เพื่อละทิ้งดัชนี

for _, value := range items {
    fmt.Printf("Value: %d\n", value)
}

2.3.4 วนลูปผ่านแผนที่

เมื่อวนลูปผ่านแผนที่ การใช้ for loop และ range expression เป็นสิ่งที่มีประสิทธิภาพมาก นี้ช่วยให้คุณได้รับคู่ค่าที่สำคัญของแต่ละคีย์ในแผนที่

colors := map[string]string{"red": "#ff000", "green": "#00ff00", "blue": "#000ff"}
for key, value := range colors {
    fmt.Printf("Key: %s, Value: %s\n", key, value)
}

ในตัวอย่างนี้เราพิมพ์คีย์ทั้งหมดและค่าที่เกี่ยวข้องในแผนที่ colors ที่คล้ายกับการวนลูปผ่าน slice หากคุณต้องการเพียงแค่คีย์หรือค่าคุณสามารถเลือกที่จะไม่สนใจอีกฝ่ายหนึ่ง

หมายเหตุ: การใช้งานของแผนที่จะอธิบายอย่างละเอียดในบทต่อไป หากคุณไม่เข้าใจส่วนนี้ก็ไม่เป็นไร ที่สำคัญคือคุณเข้าใจว่า for loop สามารถใช้ได้ตามแบบนี้

3 ควบคุมการเคลื่อนไหวของลูป

3.1 ใช้ break เพื่อจบลูป

บางครั้งเราต้องการที่จะออกจากลูปล่วงหน้าเมื่อเงื่อนไขที่ระบุได้ถูกตอบเป็นจริง และในกรณีเช่นนั้นคำสั่ง break สามารถใช้ได้ ด้านล่างนี้เป็นตัวอย่างการใช้ break เพื่อออกจากลูป:

package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        if i == 5 {
            break // ออกจากลูปเมื่อ i เท่ากับ 5
        }
        fmt.Println("ค่าของ i คือ:", i)
    }
    // ผลลัพธ์จะประกอบด้วยค่าจาก 0 ถึง 4 เท่านั้น
}

3.2 ใช้ continue เพื่อข้ามการวนซ้ำ

ในบางสถานการณ์เราอาจต้องการข้ามการวนซ้ำปัจจุบันและดำเนินการต่อในการวนลูปถัดไป สามารถทำได้โดยใช้คำสั่ง continue ต่อไปนี้คือตัวอย่าง:

package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        if i%2 != 0 {
            continue // ข้ามการวนซ้ำนี้หาก i เป็นเลขคี่
        }
        fmt.Println("เลขคู่:", i)
    }
}