Tôi đã thấy một vài người phàn nàn về vòng lặp lặp lại, cùng với dòng "tại sao chúng ta phải nói i = 0; i < len; i++trong thời đại ngày nay?".
Tôi không đồng ý, tôi thích xây dựng. Bạn có thể sử dụng phiên bản dài nếu muốn, nhưng thành ngữ cờ vây là
var a = []int{1, 2, 3}
for i, v := range a {
fmt.Println(i, v)
}
Cấu for .. rangetrúc lặp lại trên tất cả các phần tử và cung cấp hai giá trị - chỉ số ivà giá trị v.
range cũng hoạt động trên bản đồ và kênh.
Tuy nhiên, nếu bạn không thích forở bất kỳ hình thức nào, bạn có thể xác định each, mapv.v. trong một vài dòng:
type IntArr []int
// 'each' takes a function argument.
// The function must accept two ints, the index and value,
// and will be called on each element in turn.
func (a IntArr) each(fn func(index, value int)) {
for i, v := range a {
fn(i, v)
}
}
func main() {
var a = IntArr([]int{2, 0, 0, 9}) // create int slice and cast to IntArr
var fnPrint = func(i, v int) {
fmt.Println(i, ":", v)
} // create a function
a.each(fnPrint) // call on each element
}
bản in
0 : 2
1 : 0
2 : 0
3 : 9
Tôi bắt đầu thích Đi rất nhiều :)