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个条件,那这个类型就可以不用初始化直接使用。

相关推荐
lead520lyq8 小时前
Golang本地内存缓存
开发语言·缓存·golang
小邓吖9 小时前
自己做了一个工具网站
前端·分布式·后端·中间件·架构·golang
码界奇点11 小时前
基于Gin与GORM的若依后台管理系统设计与实现
论文阅读·go·毕业设计·gin·源代码管理
迷迭香与樱花12 小时前
Gin 框架
go·gin
金庆17 小时前
Commit Hash from debug.ReadBuildInfo()
golang
源代码•宸18 小时前
Golang面试题库(sync.Map)
开发语言·后端·面试·golang·map·sync.map·expunged
终生成长者18 小时前
Golang cursorrule
开发语言·后端·golang
席万里19 小时前
基于Go和Vue快速开发的博客系统-快速上手Gin框架
vue.js·golang·gin
源代码•宸20 小时前
Golang面试题库(Map)
后端·面试·golang·map·bmap·hmap·nevacuate
只是懒得想了20 小时前
用Go通道实现并发安全队列:从基础到最佳实践
开发语言·数据库·golang·go·并发安全