几天前,我启动了一个新的go项目,并使用golangci-lint使代码风格良好。我发现gochecknoinits是golangci-lint的短毛绒之一,它告诉我不要使用init。
为方便起见,我可以将简单的初始代码放在init中。如果没有init,则必须在使用该程序包之前编写一个Init函数并找到要调用它的地方。这可以被忘记或可以多次执行。
那么,在go中使用init真的不好吗?
答案 0 :(得分:4)
包init()
函数是一种方便的工具,有时是必需的,但不应过度使用。它们通常用于初始化某些全局变量,但甚至应尽可能避免使用全局变量。
引用github.com/leighmcculloch/gochecknoinits
:
init函数导致导入具有副作用,并且副作用难以测试,降低了可读性并增加了代码的复杂性。
有您的答案。导入软件包时,将调用其init()
函数,并且可以执行它们想要执行的任何操作。它们可能会更改某些(不相关的)测试所依赖的内容,因此测试是否通过取决于您是否导入特定的程序包。