我是Go的新手,我已经几次遇到以下问题。我不明白在:=
的帮助下允许(或不允许)重新定义一个变量的基本规则是什么。
您能否向我解释为什么test := func3()
确实在第一个脚本中触发错误但在第二个脚本中正常工作?
这两个脚本之间唯一改变的是调用func3()
的行的位置。
谢谢!
第一个脚本
https://play.golang.org/p/vvCI7nxHZL
package main
import (
"fmt"
)
func func1() (string, string) {
return "", ""
}
func func2() (string, string) {
return "", ""
}
func func3() string {
return ""
}
func main() {
test, test2 := func1()
test, test3 := func2()
test := func3()
fmt.Println(test, test2, test3)
}
第二脚本
https://play.golang.org/p/BTTYCGEJ4E
package main
import (
"fmt"
)
func func1() (string, string) {
return "", ""
}
func func2() (string, string) {
return "", ""
}
func func3() string {
return ""
}
func main() {
test := func3()
test, test2 := func1()
test, test3 := func2()
fmt.Println(test, test2, test3)
}
最佳答案
As described in Effective Go是:=
运算符,当左边是一个名称列表时,将声明尚未声明的名称。仅当已全部声明时,才会引发错误。
在这种典型情况下,这特别方便:
a, err := someCall()
if (err) ...
b, err := someOtherCall()
if (err) ...
在文档方面:
关于go - 为什么重新定义变量并不总是会触发错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36938575/