go语言中new和make的区别

在 Go 语言中,new 函数不能用来创建通道(chan),这是因为 new 只分配内存并返回指向该内存的指针,而不负责初始化内存。

为什么不能使用 new 来创建通道?

new 只能分配内存,但不会对内存进行初始化。对于像通道这样的复杂数据结构,它们需要通过 make 函数来进行初始化,以便能够正常工作。

使用 make 创建通道

通道是一个引用类型,必须使用 make 函数来创建。make 不仅分配内存,还会初始化通道,使其处于可用状态。

示例代码:

package main

import "fmt"

func main() {
    // 正确的创建通道方式
    ch := make(chan int, 3)

    // 向通道发送数据
    ch <- 1
    ch <- 2
    ch <- 3

    // 从通道接收数据
    fmt.Println(<-ch) // 输出: 1
    fmt.Println(<-ch) // 输出: 2
    fmt.Println(<-ch) // 输出: 3
}

错误的做法:使用 new

package main

func main() {
    // 错误的创建通道方式
    ch := new(chan int)

    // 这种方式创建的 ch 是一个 *chan int 类型的指针,而不是一个真正的通道
    // 不能用来发送或接收数据
    // ch <- 1 // 这将会引发编译错误
}

结论

  • new 用于分配内存并返回指针,但不能用于创建和初始化通道。
  • 使用 make 函数来创建通道并指定其容量,这样通道才能正常工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值