moh*_*gla 14 program-entry-point go go-toolchain
我有一个非常简单的 Go 项目设置。在根目录中,我有go.mod文件和main.go一个名为main2. 文件夹里面main2有main2.go文件。
/
|_ go.mod
|_ main.go
|_ main2
|_ main2.go
Run Code Online (Sandbox Code Playgroud)
从根目录我尝试运行 go run 命令
go run main2/main2.go
Run Code Online (Sandbox Code Playgroud)
它会抛出错误:
包命令行参数不是主包
有人可以帮忙吗?
Ale*_*esi 12
main2.go 文件的包必须是main。当项目中有 main 包和 main 函数时,编译器知道它将被编译为可执行文件,而不是库。
因此,尝试更改包命令行参数以将main 打包到 main2/main2.go 文件中。
将 golang 可执行文件想象为一栋只有前门且内部有许多不同房间的房子。进入房子后,您可以通过任何门,但要进入内部,您必须先通过前门。那个前门就是 main() 函数。
Golang 可执行文件的入口点是通过 main()。如果要为单个可执行文件运行不同的逻辑路径,可以使用 main() 作为使用命令行参数到其他包的路由函数:
package main
import (
"os"
"otherpackage"
// Your child packages get imported here.
)
func main() {
// The first argument
// is always program name
// So os.Args[1] is the first dynamic argument
arg1 := os.Args[1]
// use arg1 to decide which packages to call
if arg1 == "option1" {
// option1 code executes here.
otherpackage.DoThis()
}
if arg1 == "option2" {
// option2 code executes here.
otherpackage.DoThat()
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用如下命令运行你的程序:
go run main.go option1
程序执行 一个完整的程序是通过将称为主包的单个未导入包与其导入的所有包以传递方式链接起来创建的。主包必须具有包名称 main 并声明一个不带参数且不返回值的函数 main。