golang中只用定义不用初始化的类型规律总结

在go语言的开发中,有很多的内置类型是我们只需要定义而不需要初始化的, 如上文中提到的bytes.Buffer, strings.Builder。 其实在go语言中官方给我们定义的很多的类型都只需要定义,不需要初始化。

他们都有2个共同的规律:

1. 类型定义里面的字段都是隐藏或者非导出的

即在你查看相关文档时他的类型定义里面一般都会有 // contains filtered or unexported fields (包含隐藏或非导出字段), 他们一般都长这个样:

2. 一般都没有提供相关的NewXxx函数

如,这个strings包里面的这个Builder, 在官方文档里面 在type Builder里面就没有相关的New函数,

同时他的类型定义是长这样的

那么我们就可以放心的字节定义不用初始化就使用了。

其他常用的比如 sync同步包里面的定义,只有一个Cond类型使用需要初始化,其他类型是哟共都不选初始化,直接定义一个变量就可以使用, 如 var mu sync.Mutex //定义变量 mu.Lock() 直接使用

总结

对应go官方定义的类型,只要是同时满足上面2个条件,那这个类型就可以不用初始化直接使用。

相关推荐
aiguangyuan8 小时前
Go语言中的数据类型转换
go·后端开发
pcj_88810 小时前
Golang 配置国内代理
golang
飞川00111 小时前
【LeetCode 热题100】BFS/DFS 实战:岛屿数量 & 腐烂的橘子(力扣200 / 994 )(Go语言版)
算法·go
飞川00111 小时前
【LeetCode 热题100】回溯:括号生成 & 组合总和(力扣22 / 39 )(Go语言版)
算法·go
比特森林探险记11 小时前
GO环境配置
golang
我的golang之路果然有问题11 小时前
快速掌握 GO 之 RabbitMQ 结合 gin+gorm 案例
笔记·后端·学习·golang·rabbitmq·gin
我的golang之路果然有问题15 小时前
GO+RabbitMQ+Gin+Gorm+docker 部署 demo
笔记·后端·学习·docker·golang·rabbitmq·gin
楽码15 小时前
编程语言中使用Fallthrough控制流
前端·go·编程语言
程序员爱钓鱼15 小时前
Go语言包的组织与导入 -《Go语言实战指南》
后端·google·go
我的golang之路果然有问题18 小时前
RabbitMQ-Go 性能分析
笔记·分布式·后端·学习·golang·rabbitmq