Golang 命令

go buildgo build 命令用于编译我们指定的源码文件或代码包以及它们的依赖包。go build [-o output] [-i] [build flags] [packages]

-a 强行对所有涉及到的代码包(包含标准库中的代码包)进行重新构建,即使它们已经是最新的了。 -n 打印编译期间所用到的其它命令,但是并不真正执行它们。 -p n 指定编译过程中执行各任务的并行数量(确切地说应该是并发数量)。在默认情况下,该数量等于CPU的逻辑核数。但是在darwin/arm平台(即iPhone和iPad所用的平台)下,该数量默认是1。n为正整数 -race 开启竞态条件的检测。不过此标记目前仅在linux/amd64、freebsd/amd64、darwin/amd64和windows/amd64平台下受到支持。 -v 打印出那些被编译的代码包的名字。 -work 打印出编译时生成的临时工作目录的路径,并在编译结束时保留它。在默认情况下,编译结束时会删除该目录。 -x 打印编译期间所用到的其它命令。注意它与-n标记的区别。 -asmflags 此标记可以后跟另外一些标记,如-D 、-I 、-S 等。这些后跟的标记用于控制Go语言编译器编译汇编语言文件时的行为。 -buildmode 此标记用于指定编译模式,使用方式如-buildmode=default(这等同于默认情况下的设置)。此标记支持的编译模式目前有6种。借此,我们可以控制编译器在编译完成后生成静态链接库(即.a文件,也就是我们之前说的归档文件)、动态链接库(即.so文件)或/和可执行文件(在Windows下是.exe文件)。 -gcflags 此标记用于指定需要传递给go tool compile命令的标记的列表。go build -gcflags "-N -l" -o test test.go

go clean执行go clean 命令会删除掉执行其它命令时产生的一些文件和目录,包括: 使用go build 命令时在当前代码包下生成的与包名同名或者与Go源码文件同名的可执行文件。 执行go test 命令并加入-c 标记时在当前代码包下生成的以包名加“.test”后缀为名的文件。 还有一些目录和文件是在编译Go或C源码文件时留在相应目录中的。包括:“_obj”和“_test”目录,名称为“_testmain.go”、“test.out”、“build.out”或“a.out”的文件,名称以“.5”、“.6”、“.8”、“.a”、“.o”或“.so”为后缀的文件。这些目录和文件是在执行go build命令时生成在临时目录中的。go clean [-i] [-r] [-n] [-x] [build flags] [packages]

-r ,包括当前代码包的所有依赖包的上述目录和文件。 -i ,同时删除安装当前代码包时所产生的结果文件。如果当前代码包中只包含库源码文件,则结果文件指的就是在工作区的pkg目录的相应目录下的归档文件。如果当前代码包中只包含一个命令源码文件,则结果文件指的就是在工作区的bin目录下的可执行文件。

go docgo doc命令可以打印附于Go语言程序实体上的文档。我们可以通过把程序实体的标识符作为该命令的参数来达到查看其文档的目的。go doc [-u] [-c] [package|[package.]symbol[.method]]

-c 加入此标记后会使go doc命令区分参数中字母的大小写。 -cmd 打印出main包中的可导出的程序实体(其名称的首字母大写)的文档。 -u 打印出不可导出的程序实体(其名称的首字母小写)的文档。 godoc 是一个很强大的工具,同样用于展示指定代码包的文档。在Go语言的1.5版本以后,它是一个内置的标准命令。godoc fmt godoc -http=:6060 标记-http的值:6060表示启动的Web服务器使用本机的6060端口。之后,我们就可以通过在网络浏览器的地址栏中输入http://localhost:6060来查看以网页方式展现的Go文档了。

go env用于打印Go语言的环境信息。go env [var ...]

lbb@debian:~$ go envGOARCH="amd64" #程序构建环境的目标计算架构。GOBIN="" #存放可执行文件的目录的绝对路径。#GOCHAR="" #程序构建环境的目标计算架构的单字符标识。1.5以后的版本没有了GOEXE="" #可执行文件的后缀。GOHOSTARCH="amd64" #程序运行环境的目标计算架构。GOHOSTOS="linux" #程序运行环境的目标操作系统。GOOS="linux" #程序构建环境的目标操作系统。GOPATH="/home/lbb/work/go:/home/lbb/work/go-test" #工作区目录的绝对路径。GORACE="" #用于数据竞争检测的相关选项。GOROOT="/usr/local/go" #Go语言的安装目录的绝对路径。GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64" #Go工具目录的绝对路径。GO15VENDOREXPERIMENT="1"CC="gcc"GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"CXX="g++"CGO_ENABLED="1" #指明cgo工具是否可用的标识。

Go语言的GOPATH与工作目录详解

go fix用来修复以前老版本的代码到新版本。命令go fix 其实是命令go tool fix 的简单封装。这甚至比go fmt 命令对gofmt 命令的封装更简单。像其它的Go命令一样,go fix 命令会先对作为参数的代码包导入路径进行验证,以确保它是正确有效的。go fix [packages]

-diff 不将修正后的内容写入文件,而只打印修正前后的内容的对比信息到标准输出。 -r 只对目标源码文件做有限的修正操作。该标记的值即为允许的修正操作的名称。多个名称之间用英文半角逗号分隔。 -force 使用此标记后,即使源码文件中的代码已经与Go语言的最新版本相匹配了,也会强行执行指定的修正操作。该标记的值就是需要强行执行的修正操作的名称,多个名称之间用英文半角逗号分隔。

go fmt在go中,代码则有标准的风格go fmt [-n] [-x] [packages]

-n 打印编译期间所用到的其它命令,但是并不真正执行它们。 -x 可以看到go get命令执行过程中所使用的所有命令。

go generatego generate 是一个你可以用来自动自成Go代码的命令,你可以结合例如jsonenums(一个用于为枚举类型自动生成JSON编组样板代码的类库)这样的元编程来使用go generate快速自动实现重复乏味代码的编写。在Go标准类库里面已经有大量可以用于解析AST的接口,而AST使得编写元编程工具更简单,更容易。

go get命令go get 可以根据要求和实际情况从互联网上下载或更新指定的代码包及其依赖包,并对它们进行编译和安装。go get [-d] [-f] [-fix] [-insecure] [-t] [-u] [build flags] [packages]

-d 让命令程序只执行下载动作,而不执行安装动作。 -f 仅在使用-u标记时才有效。该标记会让命令程序忽略掉对已下载代码包的导入路径的检查。如果下载并安装的代码包所属的项目是你从别人那里Fork过来的,那么这样做就尤为重要了。 -fix 让命令程序在下载代码包后先执行修正动作,而后再进行编译和安装。之前解决相关性或建设中的代码。 -insecure 允许命令程序使用非安全的scheme(如HTTP)去下载指定的代码包。如果你用的代码仓库(如公司内部的Gitlab)没有HTTPS支持,可以添加此标记。请在确定安全的情况下使用它。 -t 让命令程序同时下载并安装指定的代码包中的测试源码文件中依赖的代码包。 -u 让命令利用网络来更新已有代码包及其依赖包。默认情况下,该命令只会从网络上下载本地不存在的代码包,而不会更新已有的代码包。 -x 可以看到go get命令执行过程中所使用的所有命令 智能下载命令go get还有一个很值得称道的功能。在使用它检出或更新代码包之后,它会寻找与本地已安装Go语言的版本号相对应的标签(tag)或分支(branch)。比如,本机安装Go语言的版本是1.x,那么go get命令会在该代码包的远程仓库中寻找名为“go1”的标签或者分支。如果找到指定的标签或者分支,则将本地代码包的版本切换到此标签或者分支。如果没有找到指定的标签或者分支,则将本地代码包的版本切换到主干的最新版本。 扩展显示下载进度条修改git clone命令, 添加 --progress选项, 使其输出进度修改cmd.Run()执行的地方, 使其将输出定位到标准输出流上

go installgo install 用于编译并安装指定的代码包及它们的依赖包。实际上,go install 命令只比go build 命令多做了一件事,即:安装编译后的结果文件到指定目录。go install [build flags] [packages]

go listgo list 命令的作用是列出指定的代码包的信息。与其他命令相同,我们需要以代码包导入路径的方式给定代码包。被给定的代码包可以有多个。这些代码包对应的目录中必须直接保存有Go语言源码文件,其子目录中的文件不算在内。否则,代码包将被看做是不完整的。go list [-e] [-f format] [-json] [build flags] [packages]

go rungo run 命令可以编译并运行命令源码文件。由于它其中包含了编译动作,因此它也可以接受所有可用于go build 命令的标记。除了标记之外,go run 命令只接受Go源码文件作为参数,而不接受代码包。与go build 命令和go install 命令一样,go run 命令也不允许多个命令源码文件作为参数,即使它们在同一个代码包中也是如此。而原因也是一致的,多个命令源码文件会都有main函数声明。go run [build flags] [-exec xprog] gofiles... [arguments...] 如果命令源码文件可以接受参数,那么在使用go run命令运行它的时候就可以把它的参数放在它的文件名后面,像这样:go run showds.go -p ~/golang/goc2p 。

go testgo test [build/test flags] [packages] [build/test flags & test binary flags]

-c 生成用于运行测试的可执行文件,但不执行它。这个可执行文件会被命名为“pkg.test”,其中的“pkg”即为被测试代码包的导入路径的最后一个元素的名称。 -i 安装/重新安装运行测试所需的依赖包,但不编译和运行测试代码。 -o 指定用于运行测试的可执行文件的名称。追加该标记不会影响测试代码的运行,除非同时追加了标记-c或-i。

go toolgo tool [-n] command [args...] go tool pprof 命令来交互式的访问概要文件的内容。命令将会分析指定的概要文件,并会根据我们的要求为我们提供高可读性的输出信息。go tool cgo 这个工具可以使我们创建能够调用C语言代码的Go语言源码文件。这使得我们可以使用Go语言代码去封装一些C语言的代码库,并提供给Go语言代码或项目使用。

go version查看Go版本

go vetgo vet 是一个用于检查Go语言源码中静态错误的简单工具go vet [-n] [-x] [build flags] [packages] go vet 命令是go tool vet 命令的简单封装。它会首先载入和分析指定的代码包,并把指定代码包中的所有Go语言源码文件和以“.s”结尾的文件的相对路径作为参数传递给go tool vet 命令。

标记-n 会让命令在执行过程中打印用到的系统命令,但不会真正执行它们。 标记-x 既打印命令又执行命令。 *标记-r ,包括当前代码包的所有依赖包的上述目录和文件。

** Golang

本文分享自微信公众号 - Golang语言社区(Golangweb)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-06-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【文末有惊喜】初探Go的编译命令执行过程

    引言 ? Go 语言这两年在语言排行榜上的上升势头非常猛,Go 语言虽然是静态编译型语言,但是它却拥有脚本化的语法,支持多种编程范式(函数式和面向对象)。Go ...

    李海彬
  • 简单围观一下有趣的 //go: 指令

    如果你平时有翻看源码的习惯,你肯定会发现。咦,怎么有的方法上面总是写着 //go: 这类指令呢。他们到底是干嘛用的?

    李海彬
  • Golang语言”奇怪用法“有哪些?

    1,go的变量声明顺序是:”先写变量名,再写类型名“,此与C/C++的语法孰优孰劣,可见下文解释: http://blog.golang.org/gos-dec...

    李海彬
  • 树莓派安装go

    大学的时候在使用openfalcon的时候讲过这个东西,但是那时候是介绍open-falcon的,所以感觉不是很具体,所以今天在安装frp的时候也碰到了这个问题...

    bboysoul
  • go语言

    goroot是go的安装目录,gopath是go语言的第三方库目录,需要添加环境变量GOPATH、GOROOT(安装时默认添加)

    sofu456
  • go 1.11 模块和版本管理

    Go modules是go team在解决包依赖管理方面的一次勇敢尝试,无论如何,对Go语言来说都是一个好事。在本篇文章中,我们就一起来看看这个新引入的go m...

    sunsky
  • 【从零开始学习Go语言】四.Go常用命令释义

    go run 命令用于编译并运行命令源码文件,如果你用vim编辑go文件并希望他暂时跑起来查看效果,使用此命令:go run file_name

    一只特立独行的兔先生
  • Go语言实战笔记(二)| Go开发工具

    在Go语言中,我们很多操作都是通过go命令进行的,比如我们要执行go文件的编译,就需要使用go build命令,除了build命令之外,还有很多常用的命令,这一...

    飞雪无情
  • 成长系列第五篇-如何更好的提问

    Go 语言环境当前版本,在下载公共包和执行入口程序时遇到科学上网问题,尝试通过 打开 GO111MODULE 解决,问题虽然解决,并不彻底,需要优化。

    needrunning
  • 【文末有惊喜】初探Go的编译命令执行过程

    引言 ? Go 语言这两年在语言排行榜上的上升势头非常猛,Go 语言虽然是静态编译型语言,但是它却拥有脚本化的语法,支持多种编程范式(函数式和面向对象)。Go ...

    李海彬

扫码关注云+社区

领取腾讯云代金券