我希望特定文件出现在我的编辑器文件列表的顶部,因此我将其作为_
的前缀。这是它的外观:
mypkg
_func.go
a.go
b.go
我使用_test
,_unix
等了解Go的文件命名约定,但是,由于_func
与特定体系结构不匹配或者是测试用例,为什么不计算作为源文件?
导入此包时,此文件中定义的功能不可用。
答案 0 :(得分:9)
显然,下划线的权重与文件开头的点前缀相同,go build
命令明显忽略了下划线。然而,这不是go
工具的决定,而是标准库中go/build
包的决定。您可以看到负责的行here。
我的猜测是临时文件以下划线为前缀,以便构建工具链忽略它们。
编辑:This comment记录行为。我引用:
// Import returns details about the Go package named by the import path,
// interpreting local import paths relative to the srcDir directory.
// If the path is a local import path naming a package that can be imported
// using a standard import path, the returned package will set p.ImportPath
// to that path.
//
// In the directory containing the package, .go, .c, .h, and .s files are
// considered part of the package except for:
//
// - .go files in package documentation
// - files starting with _ or . (likely editor temporary files)
// - files with build constraints not satisfied by the context
//
// If an error occurs, Import returns a non-nil error and a non-nil
// *Package containing partial information.
//
中以用户友好的形式找到它
答案 1 :(得分:3)
我想我记得go工具以类似的方式处理_whatever
如何将dotfiles(.whatever
)隐藏在shell中。不幸的是,我找不到任何关于文档记录的参考。
所以,如果我的内存服务器正确,你将不得不重命名源文件,因为它与Go构建系统不兼容,如果你的意思是将_file.go
视为某个包的一部分
此行为的目的可能是为CGO等工具轻松创建临时和非冲突文件。