文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
带 range 分句的 for 语句
带 range 分句的 for 语句可以访问数组、切片、字符串、map 的所有元素,还可以从通道中接收值。迭代获得元素分配给了相应的迭代变量并执行代码块。
RangeClause = [ ExpressionList "=" | IdentifierList ":=" ] "range" Expression .
右侧的 range 分句表达式叫做 range 表达式,它可能是数组、数组的指针、切片、字符串、map 或通道接收者类型。在分配时,左侧运算元必须是可寻址的或者 map 的索引表达式;它们作为迭代变量。如果 range 表达式是一个通道类型,至少需要有一个变量,它也可以有两个变量。如果迭代变量是空标识符,就代表在分句中不存在该标识符。
Range expression 1st value 2nd value
array or slice a [n]E, *[n]E, or []E index i int a[i] E
string s string type index i int see below rune
map m map[K]V key k K m[k] V
channel c chan E, <-chan E element e E
var testdata *struct {
a *[7]int
}
for i, _ := range testdata.a {
// testdata.a is never evaluated; len(testdata.a) is constant
// i ranges from 0 to 6
f(i)
}
var a [10]string
for i, s := range a {
// type of i is int
// type of s is string
// s == a[i]
g(i, s)
}
var key string
var val interface {} // element type of m is assignable to val
m := map[string]int{"mon":0, "tue":1, "wed":2, "thu":3, "fri":4, "sat":5, "sun":6}
for key, val = range m {
h(key, val)
}
// key == last map key encountered in iteration
// val == map[key]
var ch chan Work = producer()
for w := range ch {
doWork(w)
}
// empty a channel
for range ch {}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论