In addition to Weibo, there is also WeChat
Please pay attention
WeChat public account
Shulou
2025-01-19 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Development >
Share
Shulou(Shulou.com)06/03 Report--
本篇内容主要讲解"Go Struct初始化风格的抉择方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Go Struct初始化风格的抉择方法是什么"吧!
三种代码风格
风格一
在 Go 中我们常常"返回实现(struct),依赖接口",其实就是在函数返回的时候我们返回一个具体的实现,函数的参数或者是 Struct 的成员部分我们依赖接口,这个风格看起来是违背了这个原则的
// repository 存储库 type repository struct { db *gorm.DB } // NewAZRepository NewAZRepository func NewAZRepository(db *gorm.DB) domain.IAzRepository { return &repository{db: db} }
风格二
这个风格返回了实现,并且由于并没有导出看起来也具有封装的特性,但是如果你运行 golint 你就会发现会抛出错误,因为这么写,会导致我们用导出的方法将没有导出 struct 给暴露了出去
// repository 存储库 type repository struct { db *gorm.DB } // NewAZRepository NewAZRepository func NewAZRepository(db *gorm.DB) *repository { return &repository{db: db} }
风格三
这个写法的主要问题是,由于 Repository 被导出,所以在外部其他的包中就可以直接通过 &Repository{} 进行初始化,这样初始化之后使用就会导致 panic,因为成员函数是一个 nil 指针
// Repository 存储库 type Repository struct { db *gorm.DB } // NewAZRepository NewAZRepository func NewAZRepository(db *gorm.DB) *Repository { return &Repository{db: db} }
选择
选择总是困难的,带着这个问题我咨询了同组的同事还有好几个 Go 语言交流群的同学,其中大部分都会选择风格三,小部分会选择风格一,风格二几乎没有人选择。最后我选什么呢?
最后我的选择是风格一,这是针对场景来的,因为我们的这个包其实不希望其他包直接依赖实现,因为后续有可能随着发展被单独拆分成一个微服务或者是需要更换存储库,如果外部有包直接依赖 repository 会导致后续的重构比较困难
除此之外,我们在其他地方一般还是会选择风格三,因为结构体名不导出,外部其实没有比较好的办法进行初始化,例如想要 var r Repository ,至于前面提到的直接字面量初始化的问题,我们可以通过统一代码风格解决。
在 外部包 中除了用于参数传递的 Option 结构之外,其余的不允许直接通过 &XXX{} 的方式进行初始化
到此,相信大家对"Go Struct初始化风格的抉择方法是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.
Views: 0
*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.
Continue with the installation of the previous hadoop.First, install zookooper1. Decompress zookoope
"Every 5-10 years, there's a rare product, a really special, very unusual product that's the most un
© 2024 shulou.com SLNews company. All rights reserved.