Go语言--编译与工具

1 编译工具

Go语言的工具链非常丰富,从获取源码、编译、文档、测试、性能分析,到源码格式化、源码提示、重构工具等应有尽有。 在Go语言中可以使用测试框架编写单元测试,使用统一的命令行即可测试及输出测试报告的工作。基准测试提供可自定义的计时器和一整套基准测试算法,能方便快速地分析一段代码可能存在的CPU耗用和内存分配问题。性能分析工具可以将程序的CPU耗用、内存分配、竞态问题以图形化方式展现出来。

<备注> 示例代码运行使用的Go发布版本:go version go1.15.4 linux/amd64。

1.1 编译(go build)

Go语言中使用 go build 命令将.go源码编译为可执行文件。go build 有很多种编译方法,如无参数编译、文件列表编译、指定包编译等,使用这些方法都可以输出可执行文件。

 1.1.1 go build 无参数编译

1、进入到go源码目录下。

2、直接执行 go build 命令。示例如下:

lib.go

package main

import "fmt"

func pkgFunc() {
    fmt.Println("call pkgFunc")
}

main.go

package main

import (
    "fmt"
)

func main() {
    //同包的函数
    pkgFunc()
    fmt.Println("Hello world")
}

(1)使用 tree -L 4 命令查看目录树关系如下:

(2)进入到存放go源码的 gobuild 目录下,执行命令:go build

(3)使用 ls 命令查看该目录下的文件。

gobuild  lib.go  main.go

 go build 在编译开始时,会搜索当前目录下的go源文件。在该例中,go build 会找到 lib.go 和 main.go 这两个源文件。编译这两个文件后,生成当前目录名的可执行文件 gobuild,并放置于当前目录下。

(4)运行当前目录下的可执行文件:./gobuild

call pkgFunc
Hello world

1.1.2 go build + 文件列表

编译同目录下的多个源码文件时,可以在 go build 的后面提供多个文件名,go build 会编译这些源码,输出可执行文件,go build + 文件列表的格式如下:

go build file1.go file2.go ......

还是以上面的代码为例,使用 go build + 文件列表的方式编译:

// 方式1
$ go build main.go lib.go  #选中需要编译的Go源码
$ ls
lib.go  main  main.go      #这次的可执行文件变成了 main
$ ./main                   #执行 main 文件,得到期望的运行结果
call pkgFunc
Hello world

// 方式2
$ go build lib.go main.go    #把 lib.go 放在文件列表的首位
$ ls
lib  lib.go  main  main.go   #这次编译得到的可执行文件变成了 lib
$ ./lib                      #执行 lib 文件,输出结果一样
call pkgFunc
Hello world

// 方式3
$ go build *.go              #用通配符也是可以的
$ ls
lib  lib.go  main.go         #得到的可执行文件 lib

<提示> 使用 “go build + 文件列表” 方式编译时,可执行文件默认选择文件列表中第一个Go源码文件作为可执行文件名。

如果需要指定输出可执行文件名,可以使用 “- o” 参数,参见下面的示例:

$ go build -o myexec main.go lib.go
$ ls
lib.go  main.go  myexec
$ ./myexec
call pkgFunc
Hello world

<注意> 使用 “go build + 文件列表” 编译方式时,文件列表中每个文件必须是同一个包的Go源码文件。也就是说,不能像C++语言那样,将所有工程的Go源码使用文件变量方式进行编译。编译复杂工程时,需要用“指定包编译”的方式。“go build + 文件列表” 方式更适合使用Go语言编写只有少量源码文件的项目。

1.1.3 go build + 包

“go build + 包” 在设置环境变量 GOPATH 后,可以直接根据包名进行编译,即使包内文件被增删也不影响编译指令。示例如下:

1. 代码位置及源码

相对于 GOPATH 的目录树关系如下:

$ tree -L 5 src
src
└── chapter11
    └── goinstall
        ├── main.go
        └── mypkg
            └── mypkg.go

3 directories, 2 files

main.go 代码如下:

package main

import (
    "fmt"
    "goinstall/mypkg"   //在同一个项目下导入本地包
)

func main()  {
    mypkg.CustomPkgFunc()
    fmt.Println(&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值