• 技术文章 >后端开发 >Golang

    go语言中build命令怎么用

    青灯夜游青灯夜游2023-01-17 13:52:12原创100

    在go语言中,“go build”命令主要用于编译代码,可以将Go语言程序代码编译成二进制的可执行文件,但是需要手动运行该二进制文件。“go build”有很多种编译方法,如无参数编译、文件列表编译、指定包编译等,使用这些方法都可以输出可执行文件。

    本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

    Go语言是编译型的静态语言(和C语言一样),所以在运行Go语言程序之前,先要将其编译成二进制的可执行文件。

    可以通过Go语言提供的go build或者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

    命令行指令和输出说明如下:

    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

    命令行指令和输出说明如下:

    提示:

    使用“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语言编写的只有少量文件的工具。

    go build+包

    “go build+包”在设置 GOPATH 后,可以直接根据包名进行编译,即便包内文件被增(加)删(除)也不影响编译指令。

    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

    代码说明如下:

    go build 编译时的附加参数

    go build 还有一些附加参数,可以显示更多的编译信息和更多的操作,详见下表所示。

    go build编译时的附加参数
    附加参数备 注
    -v编译时显示包名
    -p n开启并发编译,默认情况下该值为 CPU 逻辑核数
    -a强制重新构建
    -n打印编译时会用到的所有命令,但不真正执行
    -x打印编译时会用到的所有命令
    -race开启竞态检测

    表中的附加参数按使用频率排列,读者可以根据需要选择使用。

    【相关推荐:Go视频教程编程教学

    以上就是go语言中build命令怎么用的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:go build go语言 Golang
    上一篇:深入聊聊设计模式利器之“职责链模式”(附go实现流程) 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • go语言中join方法有什么用• go语言扩容方法有哪几种• Go语言怎么判断指定字符是否存在• Go语言怎么获取函数执行时间• go语言怎么将float转string类型• GoClipse是什么
    1/1

    PHP中文网