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 .. range
trúc lặp lại trên tất cả các phần tử và cung cấp hai giá trị - chỉ số i
và 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
, map
v.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 :)