当前位置: 首页 > news >正文

go语言中new和make的区别

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

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

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

使用 make 创建通道

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

示例代码:

package mainimport "fmt"func main() {// 正确的创建通道方式ch := make(chan int, 3)// 向通道发送数据ch <- 1ch <- 2ch <- 3// 从通道接收数据fmt.Println(<-ch) // 输出: 1fmt.Println(<-ch) // 输出: 2fmt.Println(<-ch) // 输出: 3
}

错误的做法:使用 new

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

结论

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

http://www.lryc.cn/news/428244.html

相关文章:

  • SpringBoot响应式编程(3)R2DBC
  • 什么是私有继承
  • Scratch编程:开启智能硬件控制的大门
  • 机器学习第十二章-计算学习理论
  • Java-自定义注解操作日志记录处理(@Pointcut注解不是必须的)
  • 【c++】深入理解别名机制--引用
  • 简便的qemu img扩容方法
  • EPERM: operation not permitted,
  • 将Centos 8 Linux内核版本升级或降级到指定版本
  • 小程序商城被盗刷,使用SCDN安全加速有用吗?
  • nginx的基本使用与其日志
  • linux | 苹果OpenCL(提高应用软件如游戏、娱乐以及科研和医疗软件的运行速度和响应)
  • 算法-UKF中Sigma点生成
  • 精选五款热门骨传导耳机分享,让你避免踩坑的陷阱
  • 「字符串」前缀函数|KMP匹配:规范化next数组 / LeetCode 28(C++)
  • python人工智能002:jupyter基本使用
  • Linux使用 firewalld管理防火墙命令
  • 二叉树(三)
  • 05--kubernetes组件与安装
  • EmguCV学习笔记 VB.Net和C# 下的OpenCv开发 C# 目录
  • 探索TensorFlow:深度学习的未来
  • 探索地理空间分析的新世界:Geopandas的魔力
  • 如何为网站申请免费SSL证书?
  • Java项目集成RocketMQ
  • 如何将 Bamboo agent 能力迁移到极狐GitLab tag 上?
  • 正则表达式入门:Python ‘ re ‘ 模块详解
  • thinkphp8.0+aliapy(支付宝)pc网站支付
  • 高速信号的眼图、加重、均衡
  • 2024年PMP考前冲刺必背的学习笔记,整理好给你!
  • 增加服务器带宽可以提高资源加载速度吗?