Go文件未运行,该文件不在主包中

wbgh16ku  于 2023-04-03  发布在  Go
关注(0)|答案(2)|浏览(114)

我有一个非常简单的Go项目设置。在根目录下,我有go.mod文件和main.go以及一个名为main2的文件夹。在main2文件夹中有main2.go文件。

/
|_ go.mod
|_ main.go
|_ main2
   |_ main2.go

从根目录我试图运行去运行命令

go run main2/main2.go

它抛出错误:
包命令行参数不是主包
有人能帮忙吗?

pcww981p

pcww981p1#

main2.go文件的包必须是main。当项目中有一个main包和一个main函数时,编译器知道它将被编译为可执行文件,而不是库。
因此,尝试在main 2/main2.go文件中将package command-line-arguments更改为package main

cbeh67ev

cbeh67ev2#

把一个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()
    }
}

然后,您可以使用以下命令运行程序:
go run main.go option1
来自Golang文档:
程序执行一个完整的程序是通过将一个未导入的软件包(称为main软件包)与它导入的所有软件包进行传递链接而创建的。main软件包必须具有软件包名main,并声明一个不带参数也不返回值的函数main。

相关问题