0Pricing
Go Academy · บทเรียน

วนซ้ำคอลเลกชันด้วย range

ใช้ range กับสไลซ์ แมป และสตริง

วนซ้ำคอลเลกชันด้วย range เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

range คืออะไร

range เป็นรูปแบบพิเศษของลูป for ที่ใช้วนซ้ำอาร์เรย์ สไลซ์ แมป สตริง และแชนเนล ในแต่ละรอบจะคืนค่าดัชนี (หรือคีย์) และค่า

การวนซ้ำด้วย range บนสไลซ์

ส่งคืนดัชนีและสำเนาของสมาชิก:

package main
import "fmt"

func main() {
    fruits := []string{"apple", "banana", "cherry"}
    for i, fruit := range fruits {
        fmt.Printf("%d: %s\n", i, fruit)
    }
}

การวนซ้ำด้วย range บนอาร์เรย์

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

package main
import "fmt"

func main() {
    nums := [3]int{10, 20, 30}
    for _, v := range nums {
        fmt.Println(v)
    }
}

การวนซ้ำด้วย range บนแมป

ส่งคืนคีย์และค่าในลำดับสุ่ม:

package main
import "fmt"

func main() {
    capitals := map[string]string{
        "France": "Paris",
        "Japan":  "Tokyo",
    }
    for country, city := range capitals {
        fmt.Printf("%s -> %s\n", country, city)
    }
}

การวนซ้ำด้วย range บนสตริง

วนซ้ำผ่านจุดรหัส Unicode (rune) ไม่ใช่ไบต์ โดยดัชนีคือตำแหน่งไบต์ที่จุดเริ่มต้นของ rune:

package main
import "fmt"

func main() {
    for i, r := range "héllo" {
        fmt.Printf("%d: %c\n", i, r)
    }
}

การละทิ้งดัชนี

ใช้ _ เพื่อไม่สนใจดัชนีเมื่อคุณต้องการเฉพาะค่า:

package main
import "fmt"

func main() {
    total := 0
    for _, v := range []int{1, 2, 3, 4, 5} {
        total += v
    }
    fmt.Println(total) // 15
}

การวนด้วย range โดยใช้เฉพาะดัชนี

การละเว้นค่าจะทำให้ได้เฉพาะดัชนี เหมาะสำหรับการแก้ไขข้อมูลในตำแหน่งเดิม:

package main
import "fmt"

func main() {
    s := []int{1, 2, 3}
    for i := range s {
        s[i] *= 2
    }
    fmt.Println(s) // [2 4 6]
}

การวนซ้ำด้วย range บนแชนเนล

range จะอ่านค่าจากแชนเนลจนกว่าแชนเนลนั้นจะถูกปิด:

package main
import "fmt"

func main() {
    ch := make(chan int, 3)
    ch <- 1; ch <- 2; ch <- 3
    close(ch)
    for v := range ch {
        fmt.Println(v)
    }
}

กับดักตัวแปรในลูป

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

package main
import "fmt"

func main() {
    nums := []int{1, 2, 3}
    funcs := make([]func(), 3)
    for i, v := range nums {
        v := v // shadow with a copy
        funcs[i] = func() { fmt.Println(v) }
    }
    for _, f := range funcs { f() } // 1 2 3
}

การแก้ไขสมาชิกของสไลซ์

ค่าที่ได้จาก range เป็นสำเนา หากต้องการแก้ไข ให้ใช้ดัชนี:

package main
import "fmt"

func main() {
    s := []int{10, 20, 30}
    for i := range s {
        s[i]++
    }
    fmt.Println(s) // [11 21 31]
}

ตรวจสอบความเข้าใจอย่างรวดเร็ว

เมื่อวนซ้ำบนสตริง ตัวแปรค่าจะมีชนิดใด

สรุป: range

ประเด็นสำคัญ:

  • range ใช้ได้กับสไลซ์ อาร์เรย์ แมป สตริง และแชนเนล
  • ส่งคืน (ดัชนี, ค่า) โดยสามารถละทิ้งอย่างใดอย่างหนึ่งได้ด้วย _
  • ค่าจาก range เป็นสำเนา หากต้องการแก้ไขให้ใช้ดัชนี
  • สตริงจะให้ค่าเป็น rune ไม่ใช่ไบต์
  • ลำดับการวนซ้ำของแมปเป็นแบบสุ่ม

โจทย์ฝึกปฏิบัติ

ใช้ range เพื่อคำนวณผลรวมของค่าทั้งหมดใน map[string]int และพิมพ์ทั้งแต่ละรายการกับผลรวม

คำถามที่พบบ่อย

บทเรียน “วนซ้ำคอลเลกชันด้วย range” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “วนซ้ำคอลเลกชันด้วย range” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “วนซ้ำคอลเลกชันด้วย range”

ใช้ range กับสไลซ์ แมป และสตริง คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “วนซ้ำคอลเลกชันด้วย range” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. อาร์เรย์: คอลเลกชันความยาวคงที่
  2. สไลซ์: รายการแบบไดนามิก
  3. แมป: ที่เก็บคู่คีย์-ค่า
  4. วนซ้ำคอลเลกชันด้วย range
← กลับไปที่ Go Academy