go结构体对象是否值得Reset然后复用??

切片复用是个好习惯,因成本低,一句slice[:0]实现reset  

但对于结构体,不知道有没有跟slice[:0]一样低成本的Reset方法 

目前我是一个个字段/属性去重置,开发要成本,执行也要成本  

考虑到reset的成本,结构体对象是否值得reset复用?

已邀请:

ocean2811

赞同来自: jackey

如果是栈上的变量,除非是占用内存很大的对象否则没必要重用,毕竟栈上的对象创建和销毁代价都很低;

如果是逃逸的堆对象,要通过业务分析是否有重用价值,比如该对象是不是会频繁创建销毁等等,重用时使用sync.Pool作为对象池,将对象的生命周期交由runtime管理,不要自己创建,防止对象中嵌套指针等等...

总结: 如果重用过程不增加业务复杂度才可以考虑,你不是在用C语言也不是在受限环境下编程,不要过度设计

h12 - https://h12.io/about

重置到零值:

t = T{}

重置到非零默认值(T的成员都是基础类型):

var defaultT = T{ ...... } // global constant variable

func foo() {
t = defaultT // reset t
}

重置到非零默认值(T的成员有指针或接口):

func NewT() T {
return T{......}
}

func bar() {
t = NewT() // reset t
}


要回复问题请先登录注册