如何在Golang中构建软件包中的二进制文件?

10

我在github.com/user上有一个名为project的项目:

src/
    github.com/user/project
        sub1/
            main.go
            sub1.exe (??)
        sub2/
            main.go
            sub2.exe (??)

我正在尝试编译我的项目中的软件包。当我:

$ cd github.com/user/project/sub1
$ go build

什么都没有发生。go build似乎没有抱怨地完成了,但是没有可执行文件生成。我应该如何将软件包构建为可执行文件呢?

"go version go1.3 windows/amd64"


1
如果 main.go 文件中有一个 main() 函数,它应该构建可执行文件并将其命名为 sub1.exe(在 Windows 系统下)。sub1.exe 不就是你要找的吗?删除它,然后再次运行 go build 命令,看看是否创建了它。 - siritinga
嗯,没有可执行文件。我在软件包的目录中。我正在使用Windows,但是从cygwin命令行构建。但即使使用Windows cmd,也没有可执行文件。 - Kiril
1个回答

10

无论你将文件命名为main.go还是shubudoo.go都没有关系,唯一重要的是如果你想构建一个可执行文件(一个命令),那么你的文件必须以package main开头。还有一点需要注意:Go语言绝对不会有"子包"的概念:对于编译器来说,所有的包都是平等的。文件系统中的嵌套只是为了方便你使用。


那么,在除了main之外的包中,是不可能有一个main()函数的吗? - Kiril
链接就是我所说的。它是项目中的一个新主要包。 - Kiril
我必须承认我不理解你的问题。任何被声明为package main的包都必须有一个main()函数,而且Go工具将会把这种包构建成一个可执行文件,并在运行该可执行文件时调用main()函数。关于camget:camget是一个package main包,它包含一个main()函数并被构建成一个可执行文件。其他包、非主包、与Go完全无关或者位于其他目录(更高级别的目录、同级别的目录或者子目录)的内容都是无关紧要的。 - Volker
我的误解是,我认为只要包提供了 main(),无论该包是 maincmd 还是 xxx,我都可以将包构建成可执行二进制文件。我以为 main() 决定了是否存在可执行文件。 - Kiril
不,对于可执行文件来说,它是package mainfunc main() { - Volker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接