看别人的codereview:变量布局,变量和这个变量保护的变量;什么时候封装;lazyinit
1.看别人的codereview:变量布局,变量和这个变量保护的变量;什么时候封装;lazyinit
怎么布局变量和这个变量保护的变量
我是按这个实践的。比如我前几天自己写的一个工具,用m来保护locks.
type variable[K comparable] struct {
f lockerFactory
m sync.Mutex // guard lcoks
locks map[K]refTryLocker
}
什么时候封装
这位"Deleted User"给出的建议:"one line and used once,inline it."
lazyinit
这个pr是关于一个数字的初始化的,原代码使用了go的init()在程序开头初始化,作者把它改成了lazyinit(利用sync.Once)。
net/mail: lazily initialize dateLayouts
这其实也是我的困扰,我之前的疑问:用init初始化可能会让程序启动多花10us,用lazyinit可以在程序启动的时候避免这10us(可能),但是如果用到这个函数每次都要花费可能1ns(可能)调用sync.Once.Do,这是值得的吗?
net/mail: lazily initialize dateLayouts. Saves 6KB of memory in stdlib packages. 这个pr的的作者提到的好处
嗷,我没考虑内存。因为有时候init出来的变量可能根本不会用到,init出来也是浪费(特别在变量比较大的时候)。感觉用init的唯一情况是:init出来的变量是你必须且很快要用到的。(还有就是偷懒吧,lazyinit要多写几行)
合集:
看别人怎么做codereview
标签:
go
, codereview
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人