注册 登录

清河洛

Go的常用命令

qingheluo2021-12-06清河洛597
Go的命令格式为:go command [args]其中command为go的子命令,args为子命令的选项可以使用go help command来查看指定子命令的帮助信息常用子命令build: 编译包和依赖clean: 移除对象文件 go clean -modcache:清除所有下载的模块 env: 打印go的环境信息bug: 启动错误报告fmt: 运行gofmt进行格式化get: 下载并安装包和依赖install: 编译并安装包和依赖 list: 列出包mod:用于管理go程序依赖run: 编译并运行go程序 test: 运行测试version: 显示go的版本go run 编译并运...

Go的命令格式为:go command [args]

其中command为go的子命令,args为子命令的选项

可以使用go help command来查看指定子命令的帮助信息

常用子命令

build: 编译包和依赖
clean: 移除对象文件

go clean -modcache:清除所有下载的模块

env: 打印go的环境信息
bug: 启动错误报告

fmt: 运行gofmt进行格式化

get: 下载并安装包和依赖

install: 编译并安装包和依赖

list: 列出包

mod:用于管理go程序依赖

run: 编译并运行go程序

test: 运行测试

version: 显示go的版本

go run 编译并运行go程序(不会产生中间文件)

go clean [go_file] :删除指定go文件对应的编译生成的所有文件,不指定go文件时会删除当前目录下所有编译文件

go fmt go_file:会按照Go的要求格式化指定文件的代码格式

build命令用来编译go程序生成可执行文件的

go build [-o out_file] [build flags] [packages]

可以指定多个go文件,会将所有文件视为指定单个包的源文件列表,忽略以“_test.go”结尾的文件

但需要注意的是要生成可执行文件,需要满足两个条件:1、该程序属于main包;2、必须包含main函数

常用选项:

-C dir :设定程序运行根目录,该标记必须为所有选项中的第一个
-a     :强制重新编译(默认编译后go文件没有更改不会重新编译)
-n     :打印编译过程中执行的命令但不执行它们
-x      :打印编译过程中执行的命令且执行它们
-p n    :编译时的并行数量,默认为GOMAXPROCS,通常为可用CPU数量
-race   :开启数据竞争检测,仅在linux/amd64, freebsd/amd64, darwin/amd64,
    darwin/arm64, windows/amd64, linux/ppc64le and linux/arm64上支持

-cover   :启用代码覆盖率检测工具
-covermode val:设置覆盖率分析的模式
    如果启用了-race默认为"atomic",否则为"set",可选值
    set    :分析该语句是否运行了
    count  :分析该语句运行了多少次
    atomic :在多线程中分析该语句运行了多少次,提供了更准确的计数,但成本更高

-coverpkg pattern1,pattern2,pattern3
    设置指定包的代码进行覆盖率分析
    默认情况下仅针对main主包进行分析,该选项可以执行分析其他的包

-v:在编译时打印包的名称

-work  :打印临时工作目录的名称并且编译完成后不要删除它们

-asmflags '[pattern=]arg-list'  :在编译中每次调用go tool asm命令时传递的参数

-buildmode=type:指定要编译的类型,常见的type有
    archive:将所有非主包(非main包)构建到 .a 文件中
    c-archive:构建列出的主包和它导入的所有包,仅供C调用
    c-shared:构建列出的主包和它导入的所有包,dll文件,可供多种语言调用
    default:主要包括编译成可执行文件,非主要包编译成.a文件
    shared  :编译为使用-linkshared选项时链接的共享库
    exe:构建列出的主包及其导入的所有内容为可执行文件,未命名为 main 的包将被忽略
    plugin:构建列出的主要包,以及它们的所有包导入到 Go 插件中,未命名为 main 的包将被忽略

-buildvcs val :编译时是否添加版本信息,可选true、false或auto(默认)

-compiler name :指定编译器名称,可选gccgo或gc(默认)

-installsuffix suffix :指定打包后的安装包目录名后缀,以便将输出与默认构建分开

-gccgoflags "args" : 用于向gccgo编译器传递额外的参数,常用选项
    -O(优化级别) :-O0:不优化(默认,编译最快,但执行最慢)
                  -O1:基本优化,减少代码大小
                  -O2:更高级的优化,通常推荐使用
                  -O3:最高级别优化,可能会增加编译时间
                  -Os:优化代码大小(适用于嵌入式或小型二进制文件)
    -g(调试信息)  :-g:包含调试信息,可用于 gdb 调试
                   -g0:不包含调试信息(默认)
                   -ggdb:包含 gdb 兼容的调试信息
    -march=(架构优化):-march=native:针对本机CPU进行优化
                  -mtune=native:调整代码以适应当前 CPU,但仍兼容其他架构
                  -march=armv8-a:针对ARM v8指令集优化
                  -march=x86-64:针对 x86-64 架构优化

-gcflags "all=args"   :用于向gc编译器传递额外的参数,常用选项
    -N / -l     :禁用优化,确保变量不会因优化而被优化掉或难以跟踪,主要用于调试
                -N:禁止优化,使得调试器(如 delve)更容易解析变量和代码结构
                -l:禁止内联优化,防止函数被内联,以便更容易调试
    -m          :查看内存分配优化信息,帮助分析是否有逃逸
                -m -m(重复 -m)会提供更详细的逃逸分析信息
    -S          :查看生成的汇编指令,帮助进行底层优化或理解 Go 代码的底层实现
    -L          :查看哪些函数被编译器自动内联,以优化代码性能
    -c=N        :设置优化编译的次数,N是一个整数,默认为1,会影响编译时间和最终的优化效果

-ldflags args:在每次go tool link的调用中需要传递的参数
    为一个双引号包含的字符串
    -w:去掉DWARF调试信息,得到的程序就不能使用gdb调试了
    -s:去掉符号表,程序运行错误时的提示信息没有任何文件名和行号信息
    -X:设置编译文件的信息,如版本号,作者,更新时间等
        go build -ldflags "-w -s -X main.Version=0.1.2 -X main.Uptime=${uptime}"
        使用${变量}的形式可以使用go程序中的变量
    -H 设置头类型
        -H windowsgui或-H=windowsgui指示该程序为gui程序,不显示cmd命令窗口

-linkshared  :构建代码,这些代码将被链接到之前使用 -buildmode=shared 选项创建的共享库

-mod mode :使用的模块下载模式:readonly, vendor, or mod
    存在vendor目录且go.mod中指定的Go版本不低于1.14,默认使用vendor
    否则默认为readonly

-modcacherw:将新创建的目录在模块缓存中设置为读写权限,而不是只读权限

-modfile file :读取(以及可能写入)一个替代的go.mod文件而忽略根目录中的go.mod文件
    也会在指定的go.mod文件目录中生成一个go.sum 文件

-overlay file
    读取一个JSON配置文件,该文件为构建操作提供了一个覆盖层
    该文件其中包含一个名为“Replace”的单一字段
    当通过go run和go test运行或测试程序时,不会显示覆盖层

-pgo file
    指定用于配置文件指导优化(PGO)的配置文件路径
    当指定为“auto”时,对于构建的每个主包,会在包的目录中查找名为“default.pgo”的文件(如果该文件存在),并将其应用于主包的(传递性)依赖项(其他包不受影响)
    特殊名称“off”会关闭PGO。默认值为“auto”

-pkgdir dir:制定编译后程序加载包的目录名

-tags tag,list:由逗号分隔的构建标签列表,这些标签在构建过程中会根据条件来决定是否编译该文件

-trimpath  :从生成的可执行文件中移除所有文件系统路径,记录的文件名路径开始为模块路径@版本或者普通导入路径

-tags tag,list:由逗号分隔的构建标签列表,这些标签在构建过程中会根据条件来决定是否编译该文件

构建标签指定需要在文件的开头部分进行编写,用于指定一些编译条件,当满足这些条件时才会编译该文件

构建标签://go:build name

//go:build name
package main
......

name的可用值可以为一些预定义的特殊值,也可以是自定义的值

常用的预定义值
cgo  :只有启用cgo时才会编译
windows、darwin、linux等 :只有在指定操作系统时才编译,Go环境变量中的GOOS值
amd64、arm64、386等      :只有在指定的操作系统架构才编译,Go环境变量中的GOARCH值
        操作系统和架构可以使用go tool dist list命令查看完整的支持名录
gc、gccgo:只有在使用指定编译器时才编译
gox.y :只有在Go版本为指定版本时才编译,如go1.22

自定义值

//go:build mydiy,当使用了-tags mydiy选项时才会编译该文件

可以使用括号和逻辑运算

&& 逻辑与
|| 逻辑或
! 逻辑非

//go:build (linux && 386) || (darwin && !cgo)
    目标系统是386的linux或者没有启用cgo的darwin时才会编译该文件

通过文件名指定构建标签

当文件名是以某种特定后缀的格式时,会默认解析为构建标签

特殊的可识别的文件名格式
    *_GOOS.go
    *_GOARCH.go
    *_GOOS_GOARCH.go

如文件名source_windows_amd64.go,当目标系统是windows系统amd64架构时会编译


网址导航