Go 语言中 = 和 := 有什么区别

刚开始看go的入门教程,看到有 := 这种写法,觉得不是很好,为什么不直接用 = ,其实这两种写法是有差别的。

// = 使用必须使用先var声明例如:
var a
a=100
//或
var b = 100
//或
var c int = 100

// := 是声明并赋值,并且系统自动推断类型,不需要var关键字
d := 100

错误的做法

  1. //声明变量a
  2. var a int
  3. //声明变量a并给变量a赋值
  4. a := 1
  5. //错误提示
  6. no new variables on left side of :=
  7. //说明
  8. 重复声明变量a
//声明变量a
var a int
//声明变量a并给变量a赋值
a := 1
//错误提示
no new variables on left side of :=
//说明
重复声明变量a

声明不赋值的初始化值

  • 整型和浮点型变量的默认值为 0,如var a int,默认a=0
  • 字符串变量的默认值为空字符串
  • 布尔型变量默认为 bool
  • 切片、函数、指针变量的默认为 nil

使用编译器推导类型

  1. var a=10 //默认a为整型
var a=10 //默认a为整型

特殊例子

正确

  1. var conn net.Conn
  2. var err error
  3. conn, err = net.Dial("tcp", "127.0.0.1:8080")
  4. conn, err = net.Dial("tcp", "127.0.0.1:8080")
var conn net.Conn
var err error
conn, err = net.Dial("tcp", "127.0.0.1:8080")
conn, err = net.Dial("tcp", "127.0.0.1:8080")

正确(特殊)

  1. //虽然err重复声明了,但是conn和conn2没有重复声明,只要有一个新声明,不会报错
  2. conn, err := net.Dial("tcp", "127.0.0.1:8080")
  3. conn2, err := net.Dial("tcp", "127.0.0.1:8080")
//虽然err重复声明了,但是conn和conn2没有重复声明,只要有一个新声明,不会报错
conn, err := net.Dial("tcp", "127.0.0.1:8080")
conn2, err := net.Dial("tcp", "127.0.0.1:8080")

错误

  1. //重复声明了
  2. conn, err := net.Dial("tcp", "127.0.0.1:8080")
  3. conn, err := net.Dial("tcp", "127.0.0.1:8080")
//重复声明了
conn, err := net.Dial("tcp", "127.0.0.1:8080")
conn, err := net.Dial("tcp", "127.0.0.1:8080")

作者:

喜欢围棋和编程。

 
发布于 分类 编程标签

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注