GO语言中=和:=的区别

错误的做法

//声明变量a
var a int
//声明变量a并给变量a赋值
a := 1
//错误提示
no new variables on left side of :=
//说明
重复声明变量a

声明不赋值的初始化值

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

使用编译器推导类型

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

特殊例子

正确

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")

正确(特殊)

//虽然err重复声明了,但是conn和conn2没有重复声明,只要有一个新声明,不会报错
conn, err := net.Dial("tcp", "127.0.0.1:8080")
conn2, 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")
  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Go语言,`chan := make(chan interface{})`和`chan := make(chan struct{})`这两种通道的定义有一些区别。 1. `chan := make(chan interface{})`:这是一个通用的通道定义,其的`interface{}`表示通道可以传递任意类型的值。也就是说,我们可以在这个通道发送和接收任何类型的数据。这种通道的灵活性很高,可以用于传递不同类型的数据。 2. `chan := make(chan struct{})`:这是一个特殊的通道定义,其的`struct{}`表示通道不传递任何具体的值,只是用于信号传递的作用。空结构体不占用任何内存空间,因此它在作为信号的标志符合时非常节省资源。我们可以通过通道的打开和关闭状态来进行信号的传递。 具体来说,`chan := make(chan interface{})`可以用于传递任意类型的值,例如: ```go ch := make(chan interface{}) go func() { ch <- 42 }() result := <-ch fmt.Println(result) // 输出: 42 ``` 而`chan := make(chan struct{})`通常用于在并发编程进行信号传递,例如: ```go done := make(chan struct{}) go func() { time.Sleep(2 * time.Second) close(done) }() select { case <-done: fmt.Println("任务完成") case <-time.After(3 * time.Second): fmt.Println("任务超时") } ``` 在这个例子,我们使用空结构体通道作为一个信号通道,通过`done`通道的关闭来表示任务的完成。通过`select`语句可以等待多个通道的事件,并执行相应的操作。 总结起来,`chan := make(chan interface{})`用于传递任意类型的值,而`chan := make(chan struct{})`用于进行简单的信号传递。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值