我有一个由三个文件组成的小程序,它们都属于同一个包(主)。但是当我这样做时go build main.go
,构建没有成功。当它只有一个文件 ( main.go
) 时,一切正常。
现在我花了一些精力来分离代码,看起来编译器无法找到取出main.go
并放入这两个其他文件(与 main.go 位于同一目录中)的内容。这会导致undefined 'type'
错误。
如何编译这个由多个文件组成的程序?
我有一个由三个文件组成的小程序,它们都属于同一个包(主)。但是当我这样做时go build main.go
,构建没有成功。当它只有一个文件 ( main.go
) 时,一切正常。
现在我花了一些精力来分离代码,看起来编译器无法找到取出main.go
并放入这两个其他文件(与 main.go 位于同一目录中)的内容。这会导致undefined 'type'
错误。
如何编译这个由多个文件组成的程序?
假设您正在编写一个名为 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
into 中分离出来时,您只需将该文件也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
并将编译和运行您的程序。
Since Go 1.11+, GOPATH is no longer recommended, the new way is using Go Modules.
simple
:Create a directory:
mkdir simple
cd simple
Create a new module:
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.
Put all your files in that directory.
Finally, run:
go run .
Alternatively, you can create an executable program by building it:
go build .
# then:
./simple # if you're on xnix
# or, just:
simple # if you're on Windows
For more information, you may read this.
Go has included support for versioned modules as proposed here since 1.11. The initial prototype vgo was announced in February 2018. In July 2018, versioned modules landed in the main Go repository. In Go 1.14, module support is considered ready for production use, and all users are encouraged to migrate to modules from other dependency management systems.
你也可以只运行
go build
在您的项目文件夹 myproject/go/src/myprog
然后你可以输入
./myprog
运行您的应用程序
这取决于您的项目结构。但最直接的是:
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
您可以使用
go build *.go
go run *.go
两者都可以使用,您也可以使用
go build .
go run .
是的!这是非常直接的,这就是一揽子策略发挥作用的地方。据我所知,有三种方法。文件夹结构:
GOPATH/src/github.com/abc/myproject/adapter/main.go pkg1 pkg2 警告:adapter 只能包含包 main 和 sun 目录
go build main.go
go build main.go
go build myproject/adapter
exe文件将在您当前所在的目录中创建。