Go的执行原理以及Go的命令

本文详细介绍了Go语言的源码文件分类,包括命令源码、库源码和测试源码文件,以及它们在不同场景下的使用。接着,文章重点讲解了Go语言的常用命令,如go run、go build、go install和go get,分析了它们的工作原理和区别,并通过实例展示了每个命令的具体操作。此外,还提到了其他命令如go clean、go fmt和go test等,帮助读者理解Go语言的开发流程和工具使用。
摘要由CSDN通过智能技术生成

一、Go的源码文件

Go 的源码文件分类:

 

 

如上图,分为三类:

1、命令源码文件:

声明自己属于 main 代码包、包含无参数声明和结果声明的 main 函数。

命令源码文件被安装以后,GOPATH 如果只有一个工作区,那么相应的可执行文件会被存放当前工作区的 bin 文件夹下;如果有多个工作区,就会安装到 GOBIN 指向的目录下。

命令源码文件是 Go 程序的入口。

同一个代码包中最好也不要放多个命令源码文件。多个命令源码文件虽然可以分开单独 go run 运行起来,但是无法通过 go build 和 go install。

 

我们先打开上次课的hello目录,然后复制helloworld.go为helloworld2.go文件,并修改里面的内容:

package main
import "fmt"
func main(){
    fmt.Println("我是第二个helloworld文件")
    fmt.Print("Go Go Go !!!")
}

hello目录下有两个go文件了,一个是helloworld.go,一个是helloworld2.go。先说明一下,在上述文件夹中放了两个命令源码文件,同时都声明自己属于 main 代码包。

 

 

打开终端,进入hello这个目录,也可以看到这两个文件:

localhost:~ ruby cd go/src/hello
localhost:hello ruby ls
helloworld.go   helloworld2.go

然后我们分别执行go run命令,可以看到两个go文件都可以被执行:

localhost:hello ruby$ go run helloworld.go
HelloWorld
Go Go Go !!!localhost:hello ruby$ go run helloworld2.go
我是第二个helloworld文件
Go Go Go !!!

 

 

 

接下来执行 go build 和 go install ,看看会发生什么:

localhost:hello ruby$ go build 
# hello
./helloworld2.go:3:6: main redeclared in this block
    previous declaration at ./helloworld.go:3:6
localhost:hello ruby$ go install
# hello
./helloworld2.go:3:6: main redeclared in this block
    previous declaration at ./helloworld.go:3:6
localhost:hello ruby$ 

运行效果图:

 

 

 

这也就证明了多个命令源码文件虽然可以分开单独 go run 运行起来,但是无法通过 go build 和 go install。

同理,如果命令源码文件和库源码文件也会出现这样的问题,库源码文件不能通过 go build 和 go install 这种常规的方法编译和安装。具体例子和上述类似,这里就不再贴代码了。

所以命令源码文件应该是被单独放在一个代码包中。

2、库源码文件

库源码文件就是不具备命令源码文件上述两个特征的源码文件。存在于某个代码包中的普通的源码文件。

库源码文件被安装后,相应的归档文件(.a 文件)会被存放到当前工作区的 pkg 的平台相关目录下。

 

3、测试源码文件

名称以 _test.go 为后缀的代码文件,并且必须包含 Test 或者 Benchmark 名称前缀的函数:

func TestXXX( t *testing.T) {
​
}

名称以 Test 为名称前缀的函数,只能接受 *testing.T 的参数,这种测试函数是功能测试函数。

func BenchmarkXXX( b *testing.B) {
​
}
​

名称以 Benchmark 为名称前缀的函数,只能接受 *testing.B 的参数,这种测试函数是性能测试函数。

现在答案就很明显了:

命令源码文件是可以单独运行的。可以使用 go run 命令直接运行,也可以通过 go build 或 go install 命令得到相应的可执行文件。所以命令源码文件是可以在机器的任何目录下运行的。

举个栗子:

比如平时我们在 LeetCode 上刷算法题,这时候写的就是一个程序,这就是命令源码文件,可以在电脑的任意一个文件夹新建一个 go 文件就可以开始刷题了,写完就可以运行,对比执行结果,答案对了就可以提交代码。

但是公司项目里面的代码就不能这样了,只能存放在 GOPATH 目录下。因为公司项目不可能只有命令源码文件的,肯定是包含库源码文件,甚至包含测试源码文件的。

 

二、Go的命令

目前Go的最新版1.12里面基本命令有以下17个。

我们可以打开终端输入:go help即可看到Go的这些命令以及简介。

    bug         start a bug report
    build       compile packages and dependencies
    clean       remove object files and cached files
    doc         show documentation for package or symbol
    env         print Go environment information
    fix         update packages to use new APIs
    fmt         gofmt (reformat) package sources
    generate    generate Go files by processing source
    get         download and install packages and dependencies
    install     compile and install packages and dependencies
    list        list packages or modules
    mod         module maintenance
    run 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值