我有一个包含三个文件的小程序,所有文件都属于同一个程序包(主文件),但是当我“进行构建main.go”时,构建不会成功。当它只是一个文件(main.go)时,一切正常。现在,我已经花了一些力气来分离代码,看来编译器无法找到从main.go中取出的东西并放入其他两个文件(与main.go位于同一目录中) 。导致“未定义的'类型'”错误。
如何编译由多个文件组成的程序?
Answers:
假设您正在编写一个名为myprog的程序:
将所有文件放在这样的目录中
myproject/go/src/myprog/xxx.go
然后添加myproject/go
到GOPATH
然后跑
go install myprog
这样,您可以根据需要在myproject / go / src中添加其他程序包和程序。
参考:http : //golang.org/doc/code.html
(此文档总是被新手所错过,并且一开始常常被误解。它应该得到Go小组IMO的最大关注)
main.go
例如more.go
,当您将代码从分隔为时,您只需将该文件也传递给go build
/ go run
/ go install
。
所以如果你以前跑过
go build main.go
你现在只是
go build main.go more.go
作为更多信息:
go build --help
状态:
如果参数是.go文件列表,则build会将其视为指定单个程序包的源文件列表。
请注意,go build
和的go install
区别go run
在于前两个状态期望将程序包名称作为参数,而后者则期望go files。但是,前两个也将像go install一样接受go文件。
如果您想知道:build将仅build
打包/文件,install
将在GOPATH中生成目标文件和二进制文件,run
并将编译并运行程序。
你也可以跑
go build
在您的项目文件夹myproject / go / src / myprog中
然后你可以输入
./myprog
运行您的应用
chmod +x
该文件的运行权限即可
从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
有关更多信息,您可以阅读此内容。
从1.11开始,Go就包含了对版本模块的支持。最初的原型vgo于2018年2月发布。2018年7月,版本化模块降落在主Go存储库中。在Go 1.14中,模块支持被认为已准备好用于生产,并且鼓励所有用户从其他依赖项管理系统迁移到模块。
您可以使用
go build *.go
go run *.go
两者都可以使用,您也可以使用
go build .
go run .
这取决于您的项目结构。但最直接的是:
go build ./... -o ./myproject
然后运行./myproject
。
假设您的项目结构如下所示
- hello
|- main.go
然后您只需转到项目目录并运行
go build -o ./myproject
然后./myproject
在shell上运行。
要么
# most easiest; builds and run simultaneously
go run main.go
假设您的主文件嵌套在一个子目录中,例如 cmd
- hello
|- cmd
|- main.go
那你就跑
go run cmd/main.go
对!这很简单,这就是打包策略起作用的地方。据我所知,有三种方法。文件夹结构:
GOPATH / src / github.com/ abc / myproject / adapter / main.go pkg1 pkg2警告:适配器只能包含软件包main和sun目录
go build main.go
go build main.go
go build myproject/adapter
exe文件将在您当前所在的目录中创建。