การควบคุมลูปใน Go
ใน Go มีคำสั่งลูปเพียงแบบเดียว for Go ทิ้งคำสั่ง while ไป คำสั่ง for สามารถใช้เป็น while ได้
for
รูปแบบคำสั่งดังนี้
for init statement; expression; post statement {
execute statement
}เมื่อเก็บเฉพาะเงื่อนไขลูปไว้ จะกลายเป็น while
for expression {
execute statement
}นี่คือลูปไม่มีที่สิ้นสุด ไม่มีทางออก
for {
execute statement
}ตัวอย่าง
นี่คือโค้ดที่เอาต์พุตตัวเลขในช่วง [0,20]
for i := 0; i <= 20; i++ {
fmt.Println(i)
}คุณสามารถเริ่มต้นตัวแปรหลายตัวพร้อมกัน แล้วเพิ่มค่าพวกมัน
for i, j := 1, 2; i < 100 && j < 1000; i, j = i+1, j+1 {
fmt.Println(i, j)
}ใช้เป็น while
num := 1
for num < 100 {
num *= 2
}ลูปคู่พิมพ์ตารางสูตรคูณเก้า นี่เป็นกรณีลูปแบบคลาสสิก
func main() {
for i := 1; i <= 9; i++ {
for j := 1; j <= 9; j++ {
if i <= j {
fmt.Printf("%d*%d = %2d ", i, j, i*j)
}
}
fmt.Println()
}
}เอาต์พุตดังนี้
1*1 = 1 1*2 = 2 1*3 = 3 1*4 = 4 1*5 = 5 1*6 = 6 1*7 = 7 1*8 = 8 1*9 = 9
2*2 = 4 2*3 = 6 2*4 = 8 2*5 = 10 2*6 = 12 2*7 = 14 2*8 = 16 2*9 = 18
3*3 = 9 3*4 = 12 3*5 = 15 3*6 = 18 3*7 = 21 3*8 = 24 3*9 = 27
4*4 = 16 4*5 = 20 4*6 = 24 4*7 = 28 4*8 = 32 4*9 = 36
5*5 = 25 5*6 = 30 5*7 = 35 5*8 = 40 5*9 = 45
6*6 = 36 6*7 = 42 6*8 = 48 6*9 = 54
7*7 = 49 7*8 = 56 7*9 = 63
8*8 = 64 8*9 = 72
9*9 = 81for range
for range สามารถใช้วนซ้ำโครงสร้างข้อมูลที่วนซ้ำได้สะดวกกว่า เช่น อาร์เรย์ สไลซ์ สตริง แมป แชนเนล รูปแบบคำสั่งดังนี้
for index, value := range iterable {
// body
}index คือดัชนีของโครงสร้างข้อมูลที่วนซ้ำได้ value คือค่าที่ดัชนีนั้น เช่น ใช้ for range วนซ้ำสตริง
func main() {
sequence := "hello world"
for index, value := range sequence {
fmt.Println(index, value)
}
}for range ยังสามารถวนซ้ำค่าจำนวนเต็มได้ ค่าตัวอักษร ค่าคงที่ ตัวแปรล้วนใช้ได้
for i := range 10 {
fmt.Println(i)
}
n := 10
for i := range n {
fmt.Println(i)
}
const n = 10
for i := range n {
fmt.Println(i)
}สำหรับโครงสร้างข้อมูลแต่ละประเภท การดำเนินการของ for range แตกต่างกันบ้าง ต่อไปจะกล่าวถึง คุณสามารถไปที่ Go - for statement เพื่อดูรายละเอียดเพิ่มเติม
break
คีย์เวิร์ด break จะยุติลูป for ด้านในสุด เมื่อใช้ร่วมกับป้ายกำกับสามารถบรรลุผลในการยุติลูปด้านนอกได้ ตัวอย่างดังนี้ นี่คือลูปคู่
func main() {
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if i <= j {
break
}
fmt.Println(i, j)
}
}
}เอาต์พุต
1 0
2 0
2 1
3 0
3 1
3 2
...
9 6
9 7
9 8ใช้ป้ายกำกับเพื่อขัดจังหวะลูปด้านนอก
func main() {
Outer:
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if i <= j {
break Outer
}
fmt.Println(i, j)
}
}
}เอาต์พุต
continue
คีย์เวิร์ด continue จะข้ามการวนซ้ำปัจจุบันของลูปด้านในสุด直接进入การวนซ้ำครั้งต่อไป เมื่อใช้ร่วมกับป้ายกำกับสามารถบรรลุผลในการข้ามลูปด้านนอกได้ ตัวอย่างดังนี้
func main() {
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if i > j {
continue
}
fmt.Println(i, j)
}
}
}เอาต์พุต
0 0
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
0 9
...
7 7
7 8
7 9
8 8
8 9
9 9ใช้ป้ายกำกับ
func main() {
Out:
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if i > j {
continue Out
}
fmt.Println(i, j)
}
}
}เอาต์พุต
0 0
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
0 9