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

相关推荐
宇宙帅猴9 小时前
【Ubuntu踩坑及解决方案(一)】
linux·运维·ubuntu·go
源代码•宸16 小时前
Golang原理剖析(channel面试与分析)
开发语言·经验分享·后端·面试·golang·select·channel
moxiaoran575318 小时前
Go语言中的泛型
golang
加油201918 小时前
GO语言内存逃逸和GC机制
golang·内存管理·gc·内存逃逸
源代码•宸19 小时前
Golang原理剖析(channel源码分析)
开发语言·后端·golang·select·channel·hchan·sudog
liuyunshengsir19 小时前
golang Gin 框架下的大数据量 CSV 流式下载
开发语言·golang·gin
CHHC188019 小时前
golang 项目依赖备份
开发语言·后端·golang
老蒋每日coding19 小时前
AI智能体设计模式系列(八)—— 记忆管理模式
人工智能·设计模式·golang
SomeBottle1 天前
【小记】解决校园网中不同单播互通子网间 LocalSend 的发现问题
计算机网络·go·网络编程·学习笔记·计算机基础
且去填词1 天前
深入理解 GMP 模型:Go 高并发的基石
开发语言·后端·学习·算法·面试·golang·go