Go基础-go的源码文件以及常用命令

目录

go的源码文件:

go的常用命令:

1、通用命令标记

2、go run

2、go build

3、go install

4、go get

5、其他命令


go的源码文件:

go的常用命令:

终端输入 go help,可以得到go的常用命令

The commands are:

	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         compile and run Go program
	test        test packages
	tool        run specified go tool
	version     print Go version
	vet         report likely mistakes in packages

其中和编译相关的有build,get,install,run这四个。

1、通用命令标记

以下是通用的命令标记,这些命令均适用:

名称

说明

-a

用于强制重新编译所有涉及的Go代码包(包括GO标准库中的代码包),即使已经是最新的了。该标记可以让我们有机会通过改动底层代码包做一些实验

-n

使命令打印执行过程中用到的所有命令,而不去真正执行他们。如果只是想查看或验证命令的执行过程,又不想改变任何东西,使用这个参数最合适。

-race

用于检测并报告指定Go程序中的数据竞争问题。

-v

用于打印命令执行过程中涉及的代码包。这一定包括我们指定的目标代码包,有时还包括该代码包直接或间接依赖的那些代码包。这会让我们看到那些代码包被执行过。

-work

用于打印命令执行时生成和使用的临时工作目录名字,且命令执行完后不删除它。如果不添加此标记,临时工作目录会在命令执行完后被删除。

-x

打印命令执行过程中用到的所有命令,并同时执行他们。

2、go run

go run 是用来运行命令源码文件的命令。该命令不是用来运行所有go的源码文件,需要是一个命令源码文件,或者是多个库源码文件(满足条件:同属于一个main包),不能是测试源码文件,他在执行的时候会检查源码文件的类型,如果不符合上述条件的话,go run 命令会报错并且退出,不会继续执行。

举例:首先创建mytestdemo.go文件

package main

import f "fmt"

func main(){
	f.Println("hello","world")
	f.Println("hello","china")
	
}

终端执行go run -n mytestdemo.go 

1、创建b001文件夹

2、创建exe文件夹

3、生成.a结尾的归档文件

4、在exe文件夹下生成可执行文件

终端执行得到文件路径:go run -work mytestdemo.go

利用访达,前往该文件路径/var/folders/yt/24f_qg2n6879g2fg85994jf40000gn/T/go-build688712746可以看到生成的b001

文件夹。

所以说go run命令一共生成了两个重要文件,一个是.a结尾的归档文件,一个是可执行文件。

go run命令第二次执行的时候,如果法想该代码包没有发生变化,那么go run 不会再次编译该代码包,直接静态链接

再次终端执行go run -n mytestdemo.go

直接静态链接。

2、go build

go build命令主要用于测试编译,在包的编译过程中,如果有必要会编译相关的包

1、普通包,执行go build不产生任何文件

2、main包,只执行go build命令,会在当前目录下生成一个可执行文件。如果需要在GOPATH/bin目录下生成相应的exe文件,需要执行go install 或者go build -o 路径/可执行文件名。

3、如果某个文件夹下有多个文件,在go build的后面加上文件名,就可以编译其中一个文件。go build命令会默认编译当前目录下的所有go文件

4、go build -o 可执行文件名。默认的package的名(非main包),或者是第一个源文件的文件名(main包)

5、go build会忽略目录下以“_“或者“.”开头的go文件

6、如果代码针对不同的操作系统需要做不同的处理,可以根据不同的操作系统的后缀来命名文件。

demo针对第二点:

此时项目下的路径是这样的:

\

在hello目录下执行go build命令,会在当前目录下生成一个可执行文件。

再次执行go install,如果该项目有一个工作区,会将该执行文件转移到该工作区中的bin文件夹下,如果该项目有多个工作区,会讲该执行文件转移到GOBIN对应目录下的bin文件夹中。此时只有一个工作区。符合第一个情况

go build主要做了哪些呢?

go build主要用于编译制定的源码文件或代码包以及他们的依赖包,但是注意如果用来编译库源码文件,go build执行完是不产生任何结果的,这种情况下,go build只能检查库源码问文件的有效性,只做检查性编译,而不会输出任何结果文件。

go build编译命令源码文件,会在该命令的执行目录中生成一个可执行文件

go build后面不追加目录路径的话,就把当前目录作为代码包进行编译,go build命令后面如果跟了代码包的路径作为参数,那么该代码包及其依赖都会被编译。

执行过程和go run类似

3、go install

go install是用来编译并安装代码包或者源码文件的

go install分为两个步骤:1、生成结果文件(可执行文件或者是.a结尾的包)

                                        2、会把编译好的结果移到GOPATH/pkg(.a结尾的包)或者GOPATH/bin(可执行文件)

实际上,go install命令只比go build命令多做了一件事,就是安装编译后的结果文件到制定目录

安装代码包会在当前工作区的pkg的平台相关目录下生成归档文件(.a结尾的包)

安装命令源码文件会在当前工作区的bin目录下(如果GOPATH下有多个工作区,就会放到GOBIN目录下)生成可执行文件

go install命令后面不追加参数,会把当前目录作为代码包并安装,这和go build一样的

go install命令后面如果跟了代码包导入路径作为参数,那么该代码包及其依赖都会安装

go install命令后面如果跟了命令源码源码文件以及库源码文件作为参数的话,只有这些文件会被编译并安装

4、go get

go get命令用于从远程代码仓库上下载并安装代码包,注意,go get命令会把当前的代码包下载到$GOPATH中的第一个工作区的src目录中,并安装

go get命中有一个很指的称道的功能--智能下载,在使用它检出或更新代码包之后,它会寻找与本地已安装go语言的版本号相对应的标签(tag)或分支(branch),比如,本机安装的go语言的版本是1.x,那么go get 命令会在该代码包的远程仓库中寻找名为“go1”的标签或者分支,如果找到指定的标签或者分支,则将本地代码包的版本切换到此标签或者分支,如果没有找到指定的标签或者分支,则将本地代码包的版本切换到主干的最新版本

go get常用的一些标记

标记名称 描述
-d 让命令程序只执行下载操作,不执行安装
-f 仅在使用-u标记的时候才有效,该标记会让命令程序忽略掉已下载代码包的导入路径的检查,如果下载并安装的代码包所属的项目是你从别人那fork过来的,这点尤为重要
-fix 让命令程序在下载代码包后执行修正动作,而后在进行编译和安装
-insecure 允许命令程序使用非安全的scheme(如http)去下载指定的代码包,如果用的代码草枯没有https的支持,可以添加此标记,在确定安全的情况使用
-t 让命令程序同时下载并安装指定的代码包中的测试源码文件中依赖的代码包
-u 让命令程序利用网络来更新已有代码包及其依赖包,默认情况下,该命令只会从网络上下载本地不存在的代码包,而不会更新已有的代码包
-x 可以看到go get命令的执行过程

终端执行 go get -x github.com/go-errors/errors

执行过程如下:

1、在src目录下生成一个github.com的文件夹,其中存放了github中的源码文件

2、在src同级目录下存在一个pkg,go get命令最终会把库源码文件比编译成归档文件安装在pkg目录下。

 

5、其他命令

go clean:用来移除当前源码包里面编译生成的文件。

go fmt :用来格式化写好的代码文件

go test:会自动读取源码目录下面名为*_test.go的文件,生成并运行测试用的可执行文件。

go doc:强大的文档工具,查看相应package的文档

              1、go doc net/http  http包,可以查看包中的函数以及常量等

              2、go doc fmt Printf    查看某一个包里面的函数:查看fmt包下的Printf函数

              3、go doc -src fmt Printf   查看相应的代码

go fix :用来修复以前老版本的代码到新版本

go version:查看go当前的版本

go env:查看go当前的环境变量

go list:查看当前全部安装的package

猜你喜欢

转载自blog.csdn.net/Mojitoice/article/details/107469920