在使用 Go 语言开发时,一些同学遇到 “no new variables on left side of :=” 的编译错误。 这里讲一下现象, 原因及解决办法。
错误现象
首先来看这段代码
1 | resp, err := http.Get(url) |
以上代码实现的功能是简单的访问某个网页(url), 将网页的内容打印到屏幕上。
该代码段的第6行会报 “no new variables on left side of :=” 的错误。
产生错误的原因及解决方法
产生这个错误的原因,简单的说就: “:=” 符号不止有简单的赋值功能(操作),还具有变量声明的功能,因此在 “:=” 号的左边至少需要一个新的变量。
解决方法有几种:
- 用 “=” 好代替 “:=”
因为在这段代码中,第6行是复用了第1行声明好的变量,所以不用再使用 “:=” 来声明,直接改为:
1 | _, err = io.Copy(os.Stdout, resp.Body) |
注意:用的是 “=”, 同时我们用 “_” 代替了 “resp”, 因为 Go 是强类型语言, resp 已经第一行声明为 http.Response 类型,同时我们对 io.Copy 的这个返回值不感兴趣
- 如果需要知道 io.Copy 中输出字符的数量,可以改为:
1 | count, err := io.Copy(os.Stdout, resp.Body) |
这里新声明了要给变量: count
注意: 用的是 “:=”
- 如果对 io.Copy 的返回值都不感兴趣,也可以改为:
1 | _, _ = io.Copy(os.Stdout, resp.Body) |
注意: 用的是 “=”
或是更简单的:
1 | io.Copy(os.Stdout, resp.Body) |