看别人的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 @ 2024-01-25 15:43  xiaotushaoxia  阅读(39)  评论(0)    收藏  举报