go使用结构体导出函数使用时的一个注意点

//通过访问A调用函数,需要外部特别注意:必须复制内存调用
var A = b{}
type b struct{
    C []int
}

func (s *b)D()string{

return
}

比如上述代码:

使用时有两种方式

1.  定义一个新的变量赋值一份出来使用

2. 直接通过变量A直接使用

第一种情况就需要每个人都要知道使用前必须复制一份使用,否则会造成变量无法释放,加锁都没意义。

其实第二种方式如果结构体中没变量,直接用没问题,每个函数运行时都是有各自的运行堆栈不会有变量污染的情况。

如果确实需要有这种在结构体中定义字段且用于多个函数那么就模拟New的方式,实际上就是通过一个新的函数去生成一个新的内存丢到外部去,如下代码

//var A = b{}
type b struct{
    C []int
}

//调用NewA来获取一个对象去调用
func NewA()*b{
return &b{}
}


func (s *b)D()string{

return
}

这种做法就可以避免开发人员在调用时因为聚焦于业务,偶尔可能会忽略这种情况,而导致产生一些难以预计的后果,降低开发人员的心智负担

你可能感兴趣的:(后端,笔记,golang,开发语言,后端)