2017-08-12 62 views
1

我是新來Golang,但我希望不要有東西基本是這個問題的循環。無限在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 

我覺得這是驚人的;我究竟做錯了什麼?在句法上,基於https://tour.golang.org/flowcontrol/3,一切似乎都沒問題。

回答

4

當您使用:=,聲明新的變量。一個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)) 
}
+0

(在寫這篇文章的時候,這是[我對圍棋的答案的1/3(https://stackoverflow.com/questions/45137897/use-of-variable-in- for循環 - 不認可 - 在-golang/45138077#45138077)) – Ryan

+0

我很好奇 - 爲什麼使它成爲一個社會維基? –

+1

@YvetteColomb:我知道這是一個重複的,但希望給予解釋一個更完整的代碼示例。 – Ryan