1. 首页
  2. 主题
  3. Go问与答

关于:=请教下

zhjzjnb · · 1290 次点击
```go package main import ( "fmt" "net" ) func test() (int, int) { return 2, 3 } func main() { a, b := test() a, b := test()//编译报错 no new variables on left side of := add1 := "0.0.0.0:1234" add2 := "0.0.0.0:4321" server1, err := net.Listen("tcp", add1) defer server1.Close() server2, err := net.Listen("tcp", add2)//err 编译没报错 if err != nil { fmt.Println(err.Error()) return } defer server2.Close() } ``` **不知道什么原因**<br> 请教
```golang package main import &#34;fmt&#34; func main() { // 首次使用使用:=声明并赋值 a, b := 1, 1 // 再次使用时用=来赋值,之前已经声明过了 a, b = 2, 2 // 参数中仍然有值未声明,可以继续使用:=来赋值声明 // 其实只是声明c,然后给a,c赋值,a并未重复声明 // 你可以通过下面的语句来进行实验 // a, c := &#34;1&#34;, 2 //报错误 cannot use &#34;1&#34; (type string) as type int in assignment a, c := 1, 2 // 这里还有个坑 // 函数体内,使用:=来赋值时,虽然其中有一个参数已经赋值,这两个变量会变成局部变量 // 不会影响外面的参数值, if true { a, d := &#34;4&#34;, &#34;5&#34; fmt.Println(a, d) // 4 5 } fmt.Println(a) // 1 // 如果希望使用外部变量,需要先声明d的类型,然后再赋值 if true { var d string a, d = 4, &#34;5&#34; fmt.Println(d) // 5 } fmt.Println(a, b, c) // 4 2 2 } ```
#3
更多评论
同学,你是来搞笑的吗。`:=`声明并赋值,你上面已经声明了,不需要再声明类型了,所以用`=`就好。
#1
而且提示意图很明显 "no new variables on left side of :=" ":=的左边没有新的变量需要赋值" go的错误提示很全面 很精确 很优雅 读懂报错很重要 ~
#2

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中