所以我有一个由三个文件组成的小程序,都属于同一个包(main),但是当我“go build main.go”时,构建不成功。当它只是一个文件(main.go)时一切正常。现在我花了一些力气来分离代码,看起来编译器无法找到从main.go中取出的东西并放入这两个其他文件(与main.go位于同一目录) 。这导致“未定义'类型'”错误。
我读了一些关于设置GOPATH变量的内容,所以我尝试了
set GOPATH=%cd%
go build main.go
但这也行不通。
感谢任何帮助。
答案 0 :(得分:74)
假设您正在编写一个名为myprog的程序:
将所有文件放在像这样的目录中
myproject/go/src/myprog/xxx.go
然后将myproject/go
添加到GOPATH
然后运行
go install myprog
这样你就可以在myproject / go / src中添加其他软件包和程序。
参考:http://golang.org/doc/code.html
(这个文档总是被新手错过,并且一开始常常不明白。它应该得到Go团队IMO的最大关注)
答案 1 :(得分:58)
当您将代码从main.go
分隔为例如more.go
时,您只需将该文件传递给go build
/ go run
/ go install
。
所以如果你以前跑了
go build main.go
你现在只是
go build main.go more.go
进一步的信息:
go build --help
规定:
If the arguments are a list of .go files, build treats them as a list
of source files specifying a single package.
请注意,go build
和go install
与go run
的不同之处在于,前两个状态指望包名称作为参数,而后者需要去文件。但是,前两个也将接受go文件,就像go install一样。
如果您想知道:构建只会build
包/文件,install
将在您的GOPATH中生成对象和二进制文件,run
将编译并运行您的程序。 / p>
答案 2 :(得分:26)
您也可以运行
go build
在项目文件夹myproject / go / src / myprog
中然后你可以输入
./myprog
运行您的应用
答案 3 :(得分:21)
由于使用Go 1.11+,因此不再建议使用GOPATH,因此新方法是使用Go模块。
simple
的程序:创建目录:
mkdir simple
cd simple
创建一个新模块:
go mod init github.com/username/simple
# Here, the module name is: github.com/username/simple.
# You're free to choose any module name.
# It doesn't matter as long as it's unique.
# It's better to be a URL: so it can be go-gettable.
将所有文件放在该目录中。
最后,运行:
go run .
或者,您可以通过构建可执行程序来创建可执行程序:
go build .
# then:
./simple # if you're on xnix
# or, just:
simple # if you're on Windows
有关更多信息,您可以阅读this。
Go从1.11开始就提供了对版本模块的支持。最初的原型vgo于2018年2月发布。2018年7月,版本化模块降落在主Go存储库中。 在Go 1.14中,模块支持被认为已准备好用于生产,并且鼓励所有用户从其他依赖项管理系统迁移到模块。
答案 4 :(得分:3)
这取决于您的项目结构。但最直接的是:
go build ./... -o ./myproject
然后运行./myproject
。
假设您的项目结构如下
- hello
|- main.go
然后您只需转到项目目录并运行
go build -o ./myproject
然后在外壳上运行./myproject
。
或
# most easiest; builds and run simultaneously
go run main.go
假设您的主文件嵌套在一个子目录中,例如cmd
- hello
|- cmd
|- main.go
然后您将运行
go run cmd/main.go
答案 5 :(得分:1)
您可以使用
if (Object.prototype.propertyIsEnumerable.call(this_obj, 'string')) {
result.push(this_obj.string);
}
两者都可以使用,您也可以使用
go build *.go
go run *.go
答案 6 :(得分:0)
是的!这很简单,这就是打包策略起作用的地方。据我所知,有三种方法。 文件夹结构:
GOPATH / src / github.com/ abc / 我的项目/ 适配器/ main.go pkg1 pkg2 警告:适配器只能包含软件包main和sun目录
class B(object):
def __init__(self, a = None):
if not a:
a = A()
self.a = a
go build main.go
go build main.go
exe文件将在您当前所在的目录中创建。