首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

go技巧分享(二)

这是一个系列文章,主要分享go的使用建议和技巧,每次分享3点,希望你能有所收获。

1 并发访问map

注释掉加锁和解锁的代码:

多协程并发访问map时,有可能会导致程序退出,错误信息为:fatal error: concurrent map read and map write 或者 fatal error: concurrent map writes,所以如果希望在多协程中并发访问map,必须提供某种同步机制,一般情况下通过读写锁sync.RWMutex实现对map的并发访问控制,将map和sync.RWMutex封装一下,可以实现对map的安全并发访问。示例中,如果注释掉加锁和解锁的代码,运行时就会出现并发访问map错误。

2 结构体转换成json字符串时忽略字段

将结构体转换成json字符串时,如果想忽略某些字段,可以通过在该字段后面添加`json:”-“`实现,添加该tag后,转换成json字符串时会忽略该字段。当然,你也可以通过将该字段首字母改成小写实现,只是这样的话该字段对其他包也隐藏了,两种方法各有利弊,权衡使用。

3 判断2个结构体是否相等

在使用go语言过程中,有时需要比较2个结构体是否“相等”,即结构体字段和字段值都相同。如果自己实现比较函数,当结构体字段多时比较麻烦。通过使用reflect.DeepEqual可以实现判断2个结构体是否相等,但会有一定的性能影响。另外,reflect.DeepEqual不但可以比较结构体,像切片、数组和字典等都可以比较。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180511G29Q2Q00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券