go 언어에서 "go build" 명령은 주로 코드를 컴파일하는 데 사용됩니다. Go 언어 프로그램 코드는 바이너리 실행 파일로 컴파일될 수 있지만 바이너리 파일은 수동으로 실행해야 합니다. "go build"에는 매개변수 없는 컴파일, 파일 목록 컴파일, 지정된 패키지 컴파일 등 다양한 컴파일 방법이 있습니다. 이러한 방법을 사용하여 실행 파일을 출력할 수 있습니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.
Go 언어는 컴파일된 정적 언어(C 언어와 동일)이므로 Go 언어 프로그램을 실행하기 전에 바이너리 실행 파일로 컴파일해야 합니다.
Go 언어에서 제공하는 go build
또는 go run
명령을 통해 Go 언어 프로그램을 컴파일할 수 있습니다: go build
或者go run
命令对Go语言程序进行编译:
go build
命令可以将Go语言程序代码编译成二进制的可执行文件,但是需要我们手动运行该二进制文件;
go run
命令则更加方便,它会在编译后直接运行Go语言程序,编译过程中会产生一个临时文件,但不会生成可执行文件,这个特点很适合用来调试程序。
go build命令(go语言编译命令)
Go语言中使用 go build 命令主要用于编译代码。在包的编译过程中,若有必要,会同时编译与之相关联的包。
go build 有很多种编译方法,如无参数编译、文件列表编译、指定包编译等,使用这些方法都可以输出可执行文件。
go build 无参数编译
本小节需要用到的代码具体位置是./src/chapter11/gobuild
。
代码相对于 GOPATH 的目录关系如下:
. └── src └── chapter11 └── gobuild ├── lib.go └── main.go
main.go 代码如下:
package main import ( "fmt" ) func main() { // 同包的函数 pkgFunc() fmt.Println("hello world") }
lib.go 代码如下:
package main import "fmt" func pkgFunc() { fmt.Println("call pkgFunc") }
如果源码中没有依赖 GOPATH 的包引用,那么这些源码可以使用无参数 go build。格式如下:
go build
在代码所在目录(./src/chapter11/gobuild
)下使用 go build 命令,如下所示:
$ cd src/chapter11/gobuild/ $ go build $ ls gobuild lib.go main.go $ ./gobuild call pkgFunc hello world
命令行指令和输出说明如下:
第 1 行,转到本例源码目录下。
第 2 行,go build 在编译开始时,会搜索当前目录的 go 源码。这个例子中,go build 会找到 lib.go 和 main.go 两个文件。编译这两个文件后,生成当前目录名的可执行文件并放置于当前目录下,这里的可执行文件是 go build。
第 3 行和第 4 行,列出当前目录的文件,编译成功,输出 go build 可执行文件。
第 5 行,运行当前目录的可执行文件 go build。
第 6 行和第 7 行,执行 go build 后的输出内容。
go build+文件列表
编译同目录的多个源码文件时,可以在 go build 的后面提供多个文件名,go build 会编译这些源码,输出可执行文件,“go build+文件列表”的格式如下:
go build file1.go file2.go……
在代码代码所在目录(./src/chapter11/gobuild)中使用 go build,在 go build 后添加要编译的源码文件名,代码如下:
$ go build main.go lib.go $ ls lib.go main main.go $ ./main call pkgFunc hello world $ go build lib.go main.go $ ls lib lib.go main main.go
命令行指令和输出说明如下:
第 1 行在 go build 后添加文件列表,选中需要编译的 Go 源码。
第 2 行和第 3 行列出完成编译后的当前目录的文件。这次的可执行文件名变成了 main。
第 4~6 行,执行 main 文件,得到期望输出。
第 7 行,尝试调整文件列表的顺序,将 lib.go 放在列表的首位。
第 8 行和第 9 行,编译结果中出现了 lib 可执行文件。
提示:
使用“go build+文件列表
”方式编译时,可执行文件默认选择文件列表中第一个源码文件作为可执行文件名输出。
如果需要指定输出可执行文件名,可以使用-o
参数,参见下面的例子:
$ go build -o myexec main.go lib.go $ ls lib.go main.go myexec $ ./myexec call pkgFunc hello world
上面代码中,在 go build 和文件列表之间插入了-o myexec
参数,表示指定输出文件名为 myexec。
注意:
使用“go build+文件列表”编译方式编译时,文件列表中的每个文件必须是同一个包的 Go 源码。也就是说,不能像 C++ 一样将所有工程的 Go 源码使用文件列表方式进行编译。编译复杂工程时需要用“指定包编译”的方式。
“go build+文件列表
go build
명령은 Go 언어 프로그램 코드를 바이너리 실행 파일로 컴파일할 수 있지만 바이너리 파일을 수동으로 실행해야 합니다.
go run
명령은 컴파일 후 바로 Go 언어 프로그램을 실행합니다. 컴파일 과정에서 임시 파일이 생성되지만 실행 파일은 생성되지 않습니다. 이 기능은 프로그램 디버깅에 매우 적합합니다. . go 빌드 명령(go 언어 컴파일 명령)
go 빌드 명령은 주로 Go 언어에서 사용됩니다. 코드를 컴파일합니다. 패키지 컴파일 프로세스 중에 필요한 경우 패키지와 관련된 패키지도 동시에 컴파일됩니다. 🎜🎜go 빌드에는 매개변수 없는 컴파일, 파일 목록 컴파일, 지정된 패키지 컴파일 등 다양한 컴파일 방법이 있습니다. 이러한 방법을 사용하여 실행 파일을 출력할 수 있습니다. 🎜🎜🎜매개변수 컴파일 없이 빌드하기🎜🎜🎜이 섹션에 필요한 코드의 구체적인 위치는./src/chapter11/gobuild
입니다. 🎜🎜GOPATH와 관련된 코드의 디렉터리 관계는 다음과 같습니다. 🎜. └── src └── chapter11 └──goinstall ├── main.go └── mypkg └── mypkg.go🎜main.go 코드는 다음과 같습니다. 🎜
package main import ( "chapter11/goinstall/mypkg" "fmt" ) func main() { mypkg.CustomPkgFunc() fmt.Println("hello world") }🎜lib.go 코드는 다음과 같습니다. 🎜
package mypkg import "fmt" func CustomPkgFunc() { fmt.Println("call CustomPkgFunc") }🎜종속되는 패키지 참조가 없는 경우 소스 코드의 GOPATH에서 이러한 소스 코드는 매개변수 없는 go 빌드를 사용할 수 있습니다. 형식은 다음과 같습니다. 🎜
$ export GOPATH=/home/davy/golangbook/code $ go build -o main chapter11/goinstall $ ./goinstall call CustomPkgFunc hello world🎜아래와 같이 코드가 있는 디렉터리(
./src/chapter11/gobuild
)에서 go build 명령을 사용합니다. 🎜rrreee🎜명령줄 지침 출력 지침은 다음과 같습니다. 🎜go build+file list
" 메서드를 사용하여 컴파일할 때 실행 파일은 기본적으로 파일 목록의 첫 번째 소스 코드 파일로 설정됩니다. 실행 파일 이름 출력. 🎜🎜출력 실행 파일 이름을 지정해야 하는 경우 -o
매개변수를 사용할 수 있습니다. 아래 예를 참조하세요. 🎜rrreee🎜위 코드에서 -는 go build 사이에 삽입됩니다. 파일 목록 o myexec
매개변수는 지정된 출력 파일 이름이 myexec임을 나타냅니다. 🎜🎜참고: 🎜🎜"go build+file list" 컴파일 방법을 사용하여 컴파일하는 경우 파일 목록의 각 파일은 동일한 패키지의 Go 소스 코드여야 합니다. 즉, 모든 프로젝트의 Go 소스 코드는 C++와 같은 파일 목록 방식을 사용하여 컴파일할 수 없습니다. 복잡한 프로젝트를 컴파일할 때는 "지정된 패키지 컴파일" 방법을 사용해야 합니다. 🎜🎜"go 빌드+파일 목록
" 방법은 파일 수가 적은 Go 언어로 작성된 도구에 더 적합합니다. 🎜🎜🎜go build+package🎜🎜🎜GOPATH 설정 후, 패키지 이름을 기준으로 "go build+package"를 직접 컴파일할 수 있습니다. 패키지에 있는 파일을 추가(추가)하거나 삭제(삭제)해도 컴파일이 됩니다. 지침은 영향을 받지 않습니다. 🎜🎜1) 코드 위치 및 소스 코드🎜本小节需要用到的代码具体位置是./src/chapter11/goinstall。
本套教程所有源码下载地址:https://pan.baidu.com/s/1ORFVTOLEYYqDhRzeq0zIiQ 提取密码:hfyf
相对于GOPATH的目录关系如下:
. └── src └── chapter11 └──goinstall ├── main.go └── mypkg └── mypkg.go
main.go代码如下:
package main import ( "chapter11/goinstall/mypkg" "fmt" ) func main() { mypkg.CustomPkgFunc() fmt.Println("hello world") }
mypkg.go代码如下:
package mypkg import "fmt" func CustomPkgFunc() { fmt.Println("call CustomPkgFunc") }
2) 按包编译命令
执行以下命令将按包方式编译 goinstall 代码:
$ export GOPATH=/home/davy/golangbook/code $ go build -o main chapter11/goinstall $ ./goinstall call CustomPkgFunc hello world
代码说明如下:
第 1 行,设置环境变量 GOPATH,这里的路径是笔者的目录,可以根据实际目录来设置 GOPATH。
第 2 行,-o执行指定输出文件为 main,后面接要编译的包名。包名是相对于 GOPATH 下的 src 目录开始的。
第 3~5 行,编译成功,执行 main 后获得期望的输出。
go build 编译时的附加参数
go build 还有一些附加参数,可以显示更多的编译信息和更多的操作,详见下表所示。
附加参数 | 备 注 |
---|---|
-v | 编译时显示包名 |
-p n | 开启并发编译,默认情况下该值为 CPU 逻辑核数 |
-a | 强制重新构建 |
-n | 打印编译时会用到的所有命令,但不真正执行 |
-x | 打印编译时会用到的所有命令 |
-race | 开启竞态检测 |
表中的附加参数按使用频率排列,读者可以根据需要选择使用。
위 내용은 Go 언어에서 빌드 명령을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!