Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops golang中的无限循环_Loops_Go - Fatal编程技术网

Loops golang中的无限循环

Loops golang中的无限循环,loops,go,Loops,Go,我是刚来Golang的新手,但我希望不会有像这样基本的问题 package main import "fmt" func main() { s := make([]int, 0) s = append(s, 1) for len(s) != 0 { j := len(s) - 1 top, s := s[j], s[:j] fmt.Printf("top = %+v\n", top) fmt.Printf

我是刚来Golang的新手,但我希望不会有像这样基本的问题

package main

import "fmt"

func main() {
    s := make([]int, 0)
    s = append(s, 1)
    for len(s) != 0 {
        j := len(s) - 1
        top, s := s[j], s[:j]
        fmt.Printf("top = %+v\n", top)
        fmt.Printf("s = %+v\n", s)
        fmt.Printf("len(s) = %+v\n", len(s))
    }
}
此命令不退出,只是打印

len(s) = 0
top = 1
s = []
len(s) = 0
top = 1
s = []
len(s) = ^C

我觉得这令人震惊;我做错了什么?在语法上,基于,一切似乎都正常。

当您使用
:=
时,您声明了新的变量。在循环内部创建一个与循环外部的
s
无关的
s
。改为分配:

for len(s) != 0 {
    j := len(s) - 1
    var top int
    top, s = s[j], s[:j]
    fmt.Printf("top = %+v\n", top)
    fmt.Printf("s = %+v\n", s)
    fmt.Printf("len(s) = %+v\n", len(s))
}
适用于len(s)!=0 {
j:=len(s)-1
var top int
顶部,s=s[j],s[:j]
fmt.Printf(“顶部=%+v\n”,顶部)
fmt.Printf(“s=%+v\n”,s)
fmt.Printf(“len(s)=%+v\n”,len(s))

}
(在撰写本文时,这是)@YvetteColomb:我知道它是重复的,但想用一个更完整的代码示例进行解释。我的印象是,
:=
足够聪明,在一个元组中一个条目已经在作用域中的情况下,不会重新声明作用域中已经存在的变量。显然我错了。离开这个问题,若你们想打破无限循环,一种方法是使用“os.exit(0)”。希望它能帮助刚接触Golang的用户。