看别人的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要多写几行)

posted @   xiaotushaoxia  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示