Go基础
001 环境搭建
002 程序结构
003 执行原理
004 Go的命令
-
+
首页
004 Go的命令
 ### Go的命令 > 截至V1.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 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`这4个。接下来就依次看看这四个的作用。 在详细分析这4个命令之前,先罗列一下通用的命令标记,以下这些命令都可适用的: |名称|说明| |---|---| |`-a`|用于强制重新编译所有涉及的 Go 语言代码包(包括 Go 语言标准库中的代码包),即使它们已经是最新的了。该标记可以让我们有机会通过改动底层的代码包做一些实验。| |`-n`|使命令仅打印其执行过程中用到的所有命令,而不去真正执行它们。如果不只想查看或者验证命令的执行过程,而不想改变任何东西,使用它正好合适。| |`-race`|用于检测并报告指定 Go 语言程序中存在的数据竞争问题。当用 Go 语言编写并发程序的时候,这是很重要的检测手段之一。| |`-v`|用于打印命令执行过程中涉及的代码包。这一定包括我们指定的目标代码包,并且有时还会包括该代码包直接或间接依赖的那些代码包。这会让你知道哪些代码包被执行过了。| |`-work`|用于打印命令执行时生成和使用的临时工作目录的名字,且命令执行完成后不删除它。这个目录下的文件可能会对你有用,也可以从侧面了解命令的执行过程。如果不添加此标记,那么临时工作目录会在命令执行完毕前删除。| |`-x`|使命令打印其执行过程中用到的所有命令,并同时执行它们。| + #### go run > s `go run` 是专门用来运行命令源码文件的命令,注意,这个命令不是用来运行所有 Go 的源码文件的! + `go run` 命令<span style="background-color:yellow;color:red;font-weight:600;">只能接受一个命令源码文件以及若干个库源码文件</span>(必须同属于 main 包)作为文件参数,且不能接受测试源码文件。它在执行时会检查源码文件的类型。如果参数中有多个或者没有命令源码文件,那么 go run 命令就只会打印错误提示信息并退出,而不会继续执行。 + `go run` 执行过程  + #### go build > s `go build` 命令主要是用于测试编译。在包的编译过程中,若有必要,会同时编译与之相关联的包。 + 如果是普通包,当你执行`go build`命令后,不会产生任何文件。 + 如果是main包,当只执行`go build`命令后,会在当前目录下生成一个可执行文件。如果需要在`$GOPATH/bin`目录下生成相应的exe文件,需要执行`go install` 或者使用 `go build -o 路径/可执行文件`。 + 如果某个文件夹下有多个文件,而你只想编译其中某一个文件,可以在 `go build` 之后加上文件名,例如 `go build a.go`;`go build` 命令默认会编译当前目录下的所有go文件。 + 你也可以指定编译输出的文件名。比如,我们可以指定`go build -o 可执行文件名`,默认情况是你的package名(非main包),或者是第一个源文件的文件名(main包)。 + `go build` 会忽略目录下以`_`或者`.`开头的go文件。 + 如果你的源代码针对不同的操作系统需要不同的处理,那么你可以根据不同的操作系统后缀来命名文件。 + `go build` 执行过程  > d 当代码包中有且仅有一个命令源码文件的时候,在文件夹所在目录中执行 go build 命令,会在该目录下生成一个与目录同名的可执行文件。 + #### go install > s `go install` 命令是用来编译并安装代码包或者源码文件的。 + `go install` 命令在内部实际上分成了两步操作: + 1、第一步是生成结果文件(可执行文件或者`.a`包), + 可执行文件: 一般是 `go install` 带main函数的go文件产生的,有函数入口,所有可以直接运行 + `.a`应用包: 一般是 `go install` 不包含main函数的go文件产生的,没有函数入口,只能被调用。 + 2、第二步会把编译好的结果移到`$GOPATH/pkg`或者`$GOPATH/bin`。 + `go install` 用于编译并安装指定的代码包及它们的依赖包。 + 当指定的代码包的依赖包还没有被编译和安装时,该命令会先去处理依赖包。 + 与 `go build` 命令一样,传给 `go install` 命令的代码包参数应该以导入路径的形式提供。 + 并且,`go build` 命令的绝大多数标记也都可以用于 `go install`上, + `go install` 命令只比 `go build` 命令多做了一件事,即:<span style="background-color:yellow;color:red;font-weight:600;">安装编译后的结果文件到指定目录。</span> + 安装代码包会在当前工作区的 `pkg` 的平台相关目录下生成归档文件(即 `.a` 文件)。安装命令源码文件会在当前工作区的 `bin` 目录(如果 GOPATH 下有多个工作区,就会放在 GOBIN 目录下)生成可执行文件。 + 同样,`go install` 命令如果后面不追加任何参数,它会把当前目录作为代码包并安装。这和 `go build` 命令是完全一样的。 + `go install` 命令后面如果跟了代码包导入路径作为参数,那么该代码包及其依赖都会被安装。 + `go install` 命令后面如果跟了命令源码文件以及相关库源码文件作为参数的话,只有这些文件会被编译并安装。 + `go install` 执行过程  + #### go get > s go get 命令用于从远程代码仓库(比如 Github )上下载并安装代码包。 <span style="color:red;">注意,go get 命令会把当前的代码包下载到 $GOPATH 中的第一个工作区的 src 目录中,并安装.</span> + 使用 `go get` 下载第三方包的时候,依旧会下载到 `$GOPATH` 的第一个工作空间,而非 vendor 目录。当前工作链中并没有真正意义上的包依赖管理,不过好在有不少第三方工具可选。 |标记名称|标记描述| |---|---| |`-d`|让命令程序只执行下载动作,而不执行安装动作。| |`-f`|仅在使用-u标记时才有效。该标记会让命令程序忽略掉对已下载代码包的导入路径的检查。如果下载并安装的代码包所属的项目是你从别人那里 Fork 过来的,那么这样做就尤为重要了。| |`-fix`|让命令程序在下载代码包后先执行修正动作,而后再进行编译和安装。| |`-insecure`|允许命令程序使用非安全的 scheme(如 HTTP )去下载指定的代码包。如果你用的代码仓库(如公司内部的 Gitlab )没有HTTPS 支持,可以添加此标记。请在确定安全的情况下使用它。| |`-t`|让命令程序同时下载并安装指定的代码包中的测试源码文件中依赖的代码包。| |`-u`|让命令利用网络来更新已有代码包及其依赖包。默认情况下,该命令只会从网络上下载本地不存在的代码包,而不会更新已有的代码包。| + 命令 go get 还有一个很值得称道的功能——智能下载。在使用它检出或更新代码包之后,它会寻找与本地已安装 Go 语言的版本号相对应的标签(tag)或分支(branch)。比如,本机安装 Go 语言的版本是1.x,那么 go get 命令会在该代码包的远程仓库中寻找名为 “go1” 的标签或者分支。如果找到指定的标签或者分支,则将本地代码包的版本切换到此标签或者分支。如果没有找到指定的标签或者分支,则将本地代码包的版本切换到主干的最新版本。 + `go get` 执行过程  + #### 其他命令 + ##### go clean > s go clean 命令是用来移除当前源码包里面编译生成的文件,这些文件包括 + ##### go fmt > s go fmt 命令主要是用来帮你格式化所写好的代码文件。`gofmt -w src`,可以格式化整个项目。 + ##### go test > s go test 命令,会自动读取源码目录下面名为*_test.go的文件,生成并运行测试用的可执行文件。 + ##### go doc > s go doc 命令其实就是一个很强大的文档工具。`go doc builtin`查看相应package的文档,`go doc net/http`查看相应http包的文档,`go doc fmt Printf`查看某一个包里面的函数,`go doc -src fmt Printf`查看相应的代码 + 文档工具命令 + 查看net/http包`localhost:hello ruby$ go doc net/http` + 查看time包`localhost:hello ruby$ go doc time` + 查看某个包里的指定函数`localhost:hello ruby$ go doc fmt Printf` + 通过命令在命令行执行 `go doc -http=:端口号`,比如godoc -http=:8080。然后在浏览器中打开127.0.0.1:8080,你将会看到一个golang.org的本地copy版本,通过它你可以查询pkg文档等其它内容。如果你设置了GOPATH,在pkg分类下,不但会列出标准包的文档,还会列出你本地GOPATH中所有项目的相关文档,这对于经常被限制访问的用户来说是一个不错的选择。`localhost:hello ruby$ godoc -http=:9527` + ##### go fix 用来修复以前老版本的代码到新版本,例如go1之前老版本的代码转化到go1 + ##### go version 查看go当前的版本 + ##### go env 查看当前go的环境变量 + ##### go list 列出当前全部安装的package
Samle
2022年5月6日 23:15
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
关于 MrDoc
伊起知库MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果伊起知库给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护伊起知库,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码