如果我想构建一个可执行文件,是否应该始终从主包的文件夹运行go build?
我有一个关于Go中构建过程的简单问题 我有一个非常简单的应用程序,可能是最简单的,它的结构如下如果我想构建一个可执行文件,是否应该始终从主包的文件夹运行go build?,go,go-build,Go,Go Build,我有一个关于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.go,一切正常 不,我决定在包ma
- myapp
- main
- main.go
- go.mod
和main.go一起
package main
import "fmt"
func main() {
fmt.Println("Hello !")
}
在文件夹myapp
中,我运行命令go build-o bin/main/main.go
,一切正常
不,我决定在包main
中创建一个新函数doStuff()
,由main()调用。因此,应用程序的新结构是
- myapp
- main
- main.go
- stuff.go
- go.mod
使用main.go
package main
import "fmt"
func main() {
fmt.Println("Hello !")
doStuff()
}
package main
import "fmt"
func doStuff() {
fmt.Println("I am doing stuff")
}
和东西。去做
package main
import "fmt"
func main() {
fmt.Println("Hello !")
doStuff()
}
package main
import "fmt"
func doStuff() {
fmt.Println("I am doing stuff")
}
如果我现在尝试运行相同的构建命令go build-o bin/main/main.go
我会得到一个错误main/main.go:4:2:undefined:doStuff
但是如果我移动到main
文件夹并从那里运行命令go build-o../bin/main
一切正常
这种行为的原因是什么?如果要创建可执行文件,是否应始终从main()
所在的文件夹运行go build
命令?如果将包main
拆分为多个文件,则可以执行以下任一操作:
go build -o bin/main ./main
或
主包通常非常小。所有业务逻辑都倾向于在pkg/
或internal/
中,Go的编译单元是一个包,而不是一个文件,因此在命令行上指定文件名很少是正确的。运行go build-o bin/main./main
。谢谢。我之所以指定文件名,是因为Go中lambda函数的无服务器框架提供的模板实际上在build命令中使用了文件名。现在很清楚了。最后一个显然是错误的:想想*\u test.go或*\u windows.go文件。我说过你可以做到。按照问题的要求工作。您不应该对主pkg进行单元测试,正如我在回答中提到的,业务逻辑在别处。感谢您,该命令在*\u test.go-in/main dir中运行得非常好。对不起,你说的不对。