是否可以在 Go 语言中迭代数组索引并且不选择所有索引而是抛出一些句点(例如 1、2、3。
例如,
for i, v := range array {
//do something with i,v
}
遍历数组中的所有索引
我想知道的是有没有机会拥有这样的东西
for i:=1, v := range array {
//do something with i,v
i += 4
}
有什么问题
i := 1
for _, v := range array {
// do something
i += 4
}
如果您想要索引以外的 i 值,或者如果您想跳过索引,
for i := 1; i < len(array); i += 4 {
v := array[i]
}
?
您正在寻找 Golang 中不存在的抽象。Go 在设计上是“简单”的。当然,简单本身是一个非常相对和主观的术语。例如,以下内容对某些人来说很简单:
// This is not real Go code
for index, value := range(array, stride = 4, start = 1) {
...
}
那是因为它告诉编译器要做什么,而不是如何去做——明确的抽象——在不改变什么的情况下如何改变。但是如何抽象。正是出于这个原因,其他一些人更喜欢:
// This *is* real Go code
start := 1 // we start not at 0 but at one, just for fun
stride := 4 // we skip 3 between this and the next one of interest
for i: = start; i < len(array); i += stride {
...
}
这段代码告诉你某事是如何完成的,作为副作用,你应该了解正在做什么。一点抽象——但这是一个工程上的权衡,既有点快,又有点简单。Go 的大多数工程权衡都偏向于简单性和速度。
不过,Go 确实允许您构建这样的抽象,但需要一点努力。