“。/ ...”是指所有子文件夹吗?

时间:2017-11-08 04:18:14

标签: file go

我经常在makefile中看到“./ ...”。我认为这意味着它是当前目录中的所有子文件夹。有人可以确认并向我提供解释此语法的来源吗?

示例:

go generate ./...

1 个答案:

答案 0 :(得分:8)

导入路径模式./...匹配当前目录下的目录中的所有包,但供应商目录中的目录除外。

该模式由go工具实现。该模式不会被make,bash和任何其他可能调用go工具的工具解释。

documentation for the go command says

  

导入路径是一种模式,如果它包含一个或多个" ..."通配符,每个通配符可以匹配任何字符串,包括空字符串和包含斜杠的字符串。这样的模式扩展到GOPATH树中找到的所有包目录,其名称与模式匹配。

     

为了使普通图案更方便,有两种特殊情况。首先,/ ...在模式的末尾可以匹配一个空字符串,以便net / ...匹配其子目录中的net和packages,如net / http。其次,任何包含通配符的斜杠分隔模式元素都不会参与"供应商"的匹配。出售包的路径中的元素,因此./ ...与./vendor或./mycode/vendor的子目录中的包不匹配,但是./vendor / ...和./mycode/vendor/ ..做。但请注意,名为vendor的目录本身包含代码不是销售包:cmd / vendor将是名为vendor的命令,并且模式cmd / ...与它匹配。有关vendoring的更多信息,请参阅golang.org/s/go15vendor。

和它also says

  

以./或../开头的导入路径称为相对路径。工具链以两种方式支持相对导入路径作为快捷方式。

     

首先,相对路径可以用作命令行上的简写。如果您在包含导入的代码的目录中工作为" unicode"并且想要运行" unicode / utf8"的测试,你可以输入" go test ./utf8"而不是需要指定完整路径。同样,在相反的情况下,"去测试.."将测试" unicode"来自" unicode / utf8"目录。也允许相对模式,例如" go test ./..."测试所有子目录。请参阅帮助包'有关模式语法的详细信息。

     

其次,如果您正在编译不在工作空间中的Go程序,则可以在该程序的import语句中使用相对路径来引用附近的代码,而不是在工作空间中。这样可以很容易地在通常的工作空间之外进行小型多包装程序的试验,但是这些程序不能安装在" go install" (没有可以安装它们的工作空间),因此每次构建时都会从头开始重建它们。为避免歧义,Go程序无法在工作空间中使用相对导入路径。