package main
import "fmt"
func main() {
mapVal := map[string]string{
"a": "k",
}
a := []string{"a", "b"}
for i := range a {
for _, ok := mapVal[a[i]]; ok; {
i++
fmt.Printf("the value of i is %d", i)
}
}
}
我在map上循环了一个嵌套循环_, ok := mapVal[a[i]]; ok;
,第一次迭代i等于0,a[0] ==“a”返回值(_),ok(bool)为真,但第二次迭代i递增,i等于1,a[1] ==“b”表示ok(bool)应为假,但返回值为真,循环无限。
2条答案
按热度按时间b09cbbtk1#
您在内部循环中使用了传统的for循环。
其格式为:
i := 0
是InitStmt
,i < 10
是Condition
,i++
是PostStmt
。PostStmt
在每个循环迭代中运行。在您的示例中,
mapVal
访问是InitStmt
的一部分,ok
是Condition
的一部分,但没有PostStmt
。因此,因为
InitStmt
只在for循环开始时运行一次,所以ok
的值永远不会改变。zf2sa74q2#
问题出在你的内部循环上。它不会为下一次重新分配ok的值,如果它的值为真,它就会进入无限循环。下面是我的更新: