Golang的short variable declaration
Go中,常規宣告方式為
var i, j int
也有一種短的方式
i, j := 1, 2
這種方式相當於
var i, j int i, j = 1, 2
但是短的方式允許重複宣告,條件是必須有一個以上重複
i, j := 1, 2 z, j := 3, 4 i, j := 5, 6 // 報錯!
我們來看一段程式碼:
package main import ( "fmt" "os" ) var cwd string func init() { cwd, err := os.Getwd() if err != nil { fmt.Printf("error = %s\n", err) } fmt.Printf("init: cwd = %s\n", cwd) } func main() { fmt.Printf("main: cwd = %s\n", cwd) }
執行結果:
jiajun@debian $ go run fun.go init: cwd = /home/jiajun/test main: cwd =
為什麼cwd明明已經宣告成了全域性變數卻沒有被沒改變呢?
ofollow,noindex" target="_blank">https://golang.org/ref/spec#Short_variable_declarations
Unlike regular variable declarations, a short variable declaration may redeclare variables provided they were originally declared earlier in the same block (or the parameter lists if the block is the function body) with the same type, and at least one of the non-blank variables is new.
所以上面的程式碼想要能正常執行就得:
package main import ( "fmt" "os" ) var cwd string func init() { var err error cwd, err = os.Getwd() if err != nil { fmt.Printf("error = %s\n", err) } fmt.Printf("init: cwd = %s\n", cwd) } func main() { fmt.Printf("main: cwd = %s\n", cwd) }