go 1.11/1.12
许多Go项目已经使用GOPATH的历史解包文件系统属性将Go源文件与其他内容(人类文档md文件,非Go资源文件等)混合在一起。
在模块模式下,这种混合是没有意义的,因为Go编译器是唯一足够智能地定位和访问模块zip文件内容的东西。
因此,需要检查现有的Go项目树,将Go项目源文件与其他内容分开。而且你遇到了一个引导问题,因为在模块模式下不使用GOPATH,而检查的目的是确定哪些内容最终应该放在zip文件中,哪些应该放在其他地方,所以此时项目不再位于GOPATH中,但尚未进入zip模块。
有没有一种方法可以让Go问:“告诉我这个目录的哪个部分对构建者有用,应该放在zip模块中,哪些部分需要以其他方式公开?”
除了递归调用exec.Command("go", "list", "-f"…, ".")
之外还有其他方法吗?
(当然,一个人可以毫不客气地将整个树压缩并查看之后会发生什么,但这并不是切换到模块的有效方法)
4条答案
按热度按时间ctehm74n1#
我怀疑你要找的命令是:
tag5nh1u2#
嗯,这并不严格足够:它不会告诉你
testdata
将包含什么,例如。CC @jayconrod@ianthehat@matloob
omvjsjqw3#
tmb3ates4#
呃,除非我漏掉了什么:
GOMOD
,因为项目尚未转换为模块go list -f '{{.Dir}}'
会给出包列表,但不会对包目录中的文件进行排序,以确定哪些文件应该放在模块中,哪些文件不应该因此,您可能需要切换到模块目录根(因为否则
go list
只能检查目标目录之外的其他内容),并使用类似的命令,这并不是非常方便(而且它甚至不完整,还有其他类型的源文件需要添加)
从 Go 程序中执行 os.exec
go list
也不太优雅。