几天前我开始了一个新的 go 项目,我使用 golangci-lint 使我的代码具有良好的风格。我发现 gochecknoinits 是 golangci-lint 的 linter 之一,它告诉我不要使用 init。
在我看来,为了方便起见,我可以将简单的初始代码放在 init 中。如果没有 init,我必须编写一个 Init 函数并在使用该包之前找到调用它的地方。这可能会被忘记或被多次执行。
那么,在 go 中使用 init 真的很糟糕吗?
Package init()
函数是一种方便的工具,有时是必要的,但不应该过度使用。它们经常被用来初始化一些全局变量,但即使是全局变量也应该尽可能避免。
引用自github.com/leighmcculloch/gochecknoinits https://github.com/leighmcculloch/gochecknoinits:
Init 函数导致导入产生副作用,而副作用很难测试,降低了可读性并增加了代码的复杂性。
这就是你的答案。当你导入一个包时,它的init()
函数被调用并且可以做任何他们想做的事情。它们可能会改变您的一些(不相关的)测试所依赖的东西,因此您的测试是否通过可能取决于您是否导入特定的包。
进一步阅读:Go:没有全局变量,没有初始化函数 https://leighmcculloch.com/posts/tool-go-check-no-globals-no-inits/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)