【问题】
折腾:
期间,通过fmt.Scanf获得值,结果用如下代码:
_, err := fmt.Scanf("%s", &strBaiduUsername) gLogger.Info("strBaiduUsername=%s", strBaiduUsername) _, err := fmt.Scanf("%s", &strBaiduPassword) gLogger.Info("strBaiduPassword=%s", strBaiduPassword)
却出错:
E:\Dev_Root\go\src\EmulateLoginBaidu>go run EmulateLoginBaidu.go # command-line-arguments .\EmulateLoginBaidu.go:297: no new variables on left side of :=
如图:
即:
no new variables on left side of := |
【解决过程】
1.后来自己随便改为:
_, err1 := fmt.Scanf("%s", &strBaiduUsername) gLogger.Info("strBaiduUsername=%s", strBaiduUsername) _, err2 := fmt.Scanf("%s", &strBaiduPassword) gLogger.Info("strBaiduPassword=%s", strBaiduPassword)
的确也是可以了。
当然,会有另外的错误提示:
E:\Dev_Root\go\src\EmulateLoginBaidu>go run EmulateLoginBaidu.go # command-line-arguments .\EmulateLoginBaidu.go:295: err1 declared and not used .\EmulateLoginBaidu.go:297: err2 declared and not used
但对于上述错误,不太理解。
2.参考:
看到:
i := 1 i := 2 //这个是不允许的 := 表示声明和赋值,所以是不允许的,运行后系统会提示:no new variables on left side of := |
才想起来:
xxx := yyy
表示声明并且赋值yyy给xxx
而此处的两个:
err := someFunc()
表示声明并且赋值了两次err
而对于同一个变量,声明两次,这本身在任何语言中,都会出错的。
所以,此处的错误,也是可以理解的了。
所以,上述改为err1和err2,就不存在此错误提示了。
【总结】
go代码中,出现:
no new variables on left side of := |
的错误时,
原因是:
估计是用了
xxx := yyy
多次,而就相当于:
声明了多次的xxx(且赋值了多次的yyy)
这样的话,就是:
对同名的xxx变量,声明多次,所以必然出错;
解决办法是:
改名,比如:
xxx1 := yyy
xxx2 = yyy
就可以了。
转载请注明:在路上 » 【已解决】go语言中赋值出错:no new variables on left side of :=