我有一个非常简单的Go项目,我正在尝试重组,以便它遵循正常的Go项目结构(所以我可以运行go build
)。
我目前有两个源文件,都是package main
。所有文件,包括我的程序在运行时需要的一些文本配置文件。
现在,看起来像是:
<project_name>
- main.go
- source2.go
- config_file.txt
当我在这个目录中时,我可以运行go build
,并创建一个二进制文件(名为<project_name>
。这很好用,但我想把它设置为更好地遵循Go标准包结构(特别是使Intellij IDEA将其识别为有效项目)。
现在,我在Git中拥有整个&lt; project_name>
目录,我想保持这种方式。
我尝试将源文件放在名为src
的文件夹中,但后来go build
表示没有要编译的源文件。
我应该如何构建这个?
编辑:
弄清楚将内容放入src/
的问题:我需要运行go build <project_name>
我仍然想知道是否有办法在没有全局GOPATH的情况下建立项目。我将所有项目都放在一个文件夹下,每个项目都有一个子文件夹(并非所有项目都是Go项目)。我想保留这个系统。
我想要的是:
projects/
- project 1/
- src/
- bin/
- pkg/
- project 2/
- src/
- bin/
- pkg/
然后我希望能够运行go build <project_name>
(当我在该项目的目录中时)并让它编译该项目。这可能吗?
答案 0 :(得分:6)
How to Write Go Code中介绍了组织Go代码的“规范”方式。它在this blog post中以不太正式的方式解释。这个概念与您的想法相反 - 您有一个工作空间目录,由GOPATH环境变量指定,并且所有项目的源代码都驻留在工作空间的“src”目录的子目录中。如果在GOPATH中指定了多个目录,则可以有多个工作区。
我建议你给出“推荐”方式来组织你的代码,也许它会在你身上发展。这看起来有点不寻常,但它有其优点。如果你发现你绝对不能忍受它,你仍然可以解决它,例如通过脚本设置GOPATH dinamically。
至于Golang IDEA插件,我前一段时间尝试过的最后一个版本还没有支持这个项目结构,但是新版本可能已经改变了。事实上,插件的作者之一(dlsniper)已经在上面的博客文章中添加了评论,给出了仍然使用全局GOPATH的替代项目结构的示例。