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

本文讨论了如何避免在函数间共享结构体时出现内存问题,提倡使用New函数模拟创建新的内存实例,以降低开发人员的风险。重点在于复制内存、运行堆栈独立性和内存管理的最佳实践。
//通过访问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
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值