我对Go中的构建过程有一个简单的问题。
我有一个非常简单的应用,最简单的应用,其结构如下
- myapp
- main
- main.go
- go.mod
与main.go被package main
import "fmt"
func main() {
fmt.Println("Hello !")
}
在文件夹myapp
中,我运行命令go build -o bin/main main/main.go
,一切正常。否,我决定在
doStuff()
调用的main
包中创建一个新函数main()
,但我想将其保存在其他文件stuff.go
中。因此,该应用程序的新结构是- myapp
- main
- main.go
- stuff.go
- go.mod
与main.go
被package main
import "fmt"
func main() {
fmt.Println("Hello !")
doStuff()
}
和stuff.go
被package main
import "fmt"
func doStuff() {
fmt.Println("I am doing stuff")
}
如果现在尝试运行相同的构建命令go build -o bin/main main/main.go
,则会收到错误main/main.go:4:2: undefined: doStuff
。但是,如果我进入
main
文件夹并从那里运行命令go build -o ../bin/main
,一切正常。这种行为的原因是什么?如果要创建可执行文件,是否总是从
go build
所在的文件夹中运行main()
命令?
最佳答案
如果将main
包拆分为多个文件,则可以执行以下任一操作:
go build -o bin/main ./main
要么go build -o bin/main ./main/*
主程序包通常很小。所有业务逻辑都倾向于使用pkg/
或internal/
。
关于go - 如果要构建可执行文件,应始终从主软件包的文件夹运行构建文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62930116/