根目录下有两个文件
main.go
package main
func main() {
getID()
}
learn_snowflake.go
package main
func getID() int {
return 1
}
go build main.go
报错
undefined: getID
于是去查看了一下说明:go help build
如果要编译目录下的全部.go
文件,那么只需要进入目录 go build .
,所有依赖的其他包也会被编译进来,生成的结果文件就是目录的名称。所以上面的情况,我们只需要进入根目录go build .
如果只想编译目录下的指定.go
文件,那么进入目录 go build aaa.go bbb.go
等列出要编译的文件,它们会被编译到一起,所有依赖的其他包也会被编译进来,生成结果文件是第一个文件的名称。但是如果aaa.go
调用了ccc.go
的内容,而ccc.go
没有被列进来,那么就会报undefined
错误。所以上面的情况,我们只需要进入根目录go build main.go learn_snowflake.go
,生成main.exe
。
build会忽略掉_test.go
文件。
如果同时编译多个包,或者只编译一个非main包,那么依然会执行编译,但是会舍弃掉结果文件,相当于在检测包是否可编译。
根目录下增加文件
pkg1
demo11.go
pkg2
demo21.go
demo22.go
go build pkg2
package pkg2 is not in GOROOT (D:\Go\src\pkg2)
go build ./pkg2
没有报错,也没有生成任何文件。
go build ./pkg1 ./pkg2
没有报错,也没有生成任何文件。