为了账号安全,请及时绑定邮箱和手机立即绑定

Go文件名以下划线字符开头

Go文件名以下划线字符开头

Go
慕斯王 2021-05-07 15:12:23
我希望特定文件显示在编辑器中文件列表的顶部,所以我给它加了前缀_。看起来是这样的:mypkg  _func.go  a.go  b.go我知道围棋的文件中使用的命名约定_test,_unix等等,但是,因为_func不符合特定架构或者是一个测试的情况下,为什么不指望他的源文件?当我导入此程序包时,此文件中定义的功能不可用。
查看完整描述

2 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

显然,下划线的权重与文件开头的点前缀相同,并且被go build命令明确忽略。但是,这不是go工具的决定,而是go/build标准库中的软件包的决定。您可以在此处查看负责的行。


我的猜测是临时文件带有下划线前缀,因此构建工具链会忽略它们。


编辑:此注释记录了行为。我引用:


// 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.

//

您可以在package的包文档中go/build以用户友好的形式找到它。


查看完整回答
反对 回复 2021-05-31
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

我想我记得_whatevergo 工具以类似的方式处理 dotfiles ( .whatever)如何隐藏在 shell 中。不幸的是,我找不到任何记载它的地方的参考。

因此,如果我的内存正确地为我提供服务,那么在您打算将源文件视为_file.go某些软件包的一部分的情况下,您将不得不重命名源文件,因为它与Go构建系统不兼容。

此行为的目的可能是允许轻松地为CGO等工具创建临时且无冲突的文件。


查看完整回答
反对 回复 2021-05-31
  • 2 回答
  • 0 关注
  • 421 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信