最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】go语言中赋值出错:no new variables on left side of :=

GO crifan 12269浏览

【问题】

折腾:

【已解决】go语言中获得控制台输入的字符串

期间,通过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

即:

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.参考:

Go语言中的变量声明和赋值

看到:

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 :=

83 queries in 0.802 seconds, using 19.27MB memory