如果我需要在Go中为一个包导出两个或多个文件,那么惯用法是什么?
直到今天我这样做:
file1.go
package A
import "os"
file2.go
package A
import "os"
答案 0 :(得分:4)
这不是一个惯用的问题,而是一个范围问题。
Import declarations的范围限定为包含文件。 Spec: Import declarations:
导入声明声明包含声明的源文件取决于导入的包的功能(§Program initialization and execution),并允许访问该包的导出标识符。
另外Spec: Declarations and scope:
Go使用blocks进行词汇限定:
...
3.导入包的包名称范围是包含导入声明的文件的文件块。
...
这意味着,如果多个文件中需要一个包(形成一个包或多个包,则没关系),您必须在所有这些文件中单独导入它。
您应该做的是检查和修改如何在文件之间分隔代码,因为这可能是将函数和声明分组到具有相同依赖关系(依赖于同一组包)的同一文件中的好方法,所以你只需要导入一次这些包。
另请注意,如果包mypkg
的某些文件依赖于一组其他包,而不是mypkg
的其他文件,则将mypkg
拆分为2也可能有利可图根据依赖关系分离包。大多数这些决定都是主观的,你知道它们是否对你的情况有意义。