14.Go命令

    Go语言自带有一套完整的命令行操作,可以在终端中执行go来进行查看,如下所示:

Go is a tool for managing Go source code.

Usage:

        go <command> [arguments]

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         add dependencies to current module and install them
        install     compile and install packages and dependencies
        list        list packages or modules
        mod         module maintenance
        work        workspace 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

Use "go help <command>" for more information about a command.

Additional help topics:

        buildconstraint build constraints
        buildmode       build modes
        c               calling between Go and C
        cache           build and test caching
        environment     environment variables
        filetype        file types
        go.mod          the go.mod file
        gopath          GOPATH environment variable
        goproxy         module proxy protocol
        importpath      import path syntax
        modules         modules, module versions, and more
        module-auth     module authentication using go.sum
        packages        package lists and patterns
        private         configuration for downloading non-public code
        testflag        testing flags
        testfunc        testing functions
        vcs             controlling version control with GOVCS

Use "go help <topic>" for more information about that topic.

    这些命令对于我们在日常编写代码时非常有用,来看看一些常用的命令

14.1 go help

    go help主要用于查看各基本命令的使用帮助,其基本用法如下所示:

go help <topic>

14.2 go env

    go env主要用于输出Go语言的环境信息,基本用法如下所示:

go env [-json] [-u] [-w] [var ...]

    使用go env输出的信息如下所示:

set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\Surpass\AppData\Local\go-build
set GOENV=C:\Users\Surpass\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\Surpass\Documents\GolangProjets\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\Surpass\Documents\GolangProjets
set GOPRIVATE=
set GOPROXY=https://goproxy.cn,direct
set GOROOT=D:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLCHAIN=auto
set GOTOOLDIR=D:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.22.5
set GCCGO=gccgo
set GOAMD64=v1
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=0
set GOMOD=NUL
set GOWORK=
set CGO_CFLAGS=-O2 -g
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-O2 -g
set CGO_FFLAGS=-O2 -g
set CGO_LDFLAGS=-O2 -g
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -fno-caret-diagnostics -Qunused-arguments -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=C:\Users\Surpass\AppData\Local\Temp\go-build4139409939=/tmp/go-build -gno-record-gcc-switches

    常见的信息如下所示:

参数 说明
CGO_ENABLED 是否启用CGO工具
GOARCH 程序编译构建的目标CPU架构
GOHOSTARCH 程序运行环境的目标CPU架构
GOEXE 可执行文件的后缀
GOOS 程序编译构建的目标操作系统
GOHOSTOS 程序运行环境的目标操作系统
GOPATH 工作目录的绝对路径
GOROOT Go语言安装目录的绝对路径
GOPROXY 项目依赖的源镜像地址

    日常使用较多的是用于设置相应的环境变量信息,示例如下所示:

// 取消环境变量
go env -u GOPROX
// 设置环境变量
go env -w GOPROXY="https://goproxy.cn,direct"

14.3 go build

    这个命令主要用于编译构建,在编译构建过程中,会将相关依赖项一起编译为一个可执行的文件。基本用法如下所示:

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

    go build用法比较简洁,所有参数都可以忽略,这个时间则意味着使用当前目录进行编译构建,以下几种用法是等价的。

go build 
go build .
go build main.go

    以上三种用法,都是使用当前的目录编译构建,因为忽略了package。实际上go build本质上是需要一个路径的,让编译器可以根据package包来决定编译哪些go文件。package是一个相对路径,而且是相对于GOROOTGOPATH这两个环境变量。因此在指定了package参数后,go build 就知道需要编译构建了哪些go文件,例如:

go build surpass.net/calcs

    以上这种方式是指定了包的方式,除此之外也可以使用通配符,如下所示:

go build surpass.net/calcs/...

... 表示匹配所有字符串,这样就会构建calcs目录中所有go包

    go build默认基于当前平台进行构建支持该平台的可执行文件。但另外一个功能就是支持跨平台编译构建,使得我们可以在任何一个平台上编译构建出其他平台的可执行文件。而在Go环境变量中GOOSGOARCH分别代表编译构建目录的操作系统和CPU架构平台,可用值如下所示:

GOOS GOARCH
aix ppc64
android 386
android amd64
android arm
android arm64
darwin amd64
darwin arm64
dragonfly amd64
freebsd 386
freebsd amd64
freebsd arm
illumos amd64
ios arm64
js wasm
linux 386
linux amd64
linux arm
linux arm64
linux loong64
linux mips
linux mipsle
linux mips64
linux mips64le
linux ppc64
linux ppc64le
linux riscv64
linux s390x
netbsd 386
netbsd amd64
netbsd arm
openbsd 386
openbsd amd64
openbsd arm
openbsd arm64
plan9 386
plan9 amd64
plan9 arm
solaris amd64
wasip1 wasm
windows 386
windows amd64
windows arm
windows arm64

以上环境变量取值可以参考:https://go.dev/doc/install/source#environment

    如果需要生成支持不同平台架构的可执行程序,只需要改变环境变量GOOSGOARCH这两个环境变量就可以了,示例如下所示:

GOOS=linux GOARCH=arm64 go build main.go

更多关于go build用法可以使用命令go help build查看

14.4 go run

    go run命令主要用于编译构建源文件并执行可执行文件。基本用法如下所示:

go run [build flags] [-exec xprog] package [arguments...]

14.5 go get

    go get命令主要用于从指定地址下载第三方依赖包,并对其进行编译和安装,基本用法如下所示:

 go get [-t] [-u] [-v] [build flags] [packages]

    示例用法如下所示:

// 下载最新代码
go get example.com/pkg
// 下载指定版本的代码
go get example.com/pkg@v1.2.0

// 删除依赖包
go get example.com/pkg@none

14.6 go install

    go install主要用于编译构建并安装指定的代码包及其依赖项,在实际运行时会分为两个步骤生成可执行文件将生成的可执行文件复制至GOPATH或GOPATH/bin目录中,基本用法如下所示:

go install [build flags] [packages]

14.7 go test

    go test主要用于对Go语言编写的程序进行测试。基本用法如下所示:

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

    go test测试是以代码包为单位的,其中测试文件是_test.go做为后缀,里面包含若干测试函数的源文件,其中测试函数一般是以Test做为前缀的,且有一个类型为testing.T的参数。

14.8 go vet

    go vet主要用于检查Go语言源码中的静态错误的工具,其基本用法如下所示:

go vet [build flags] [-vettool prog] [vet flags] [packages]

14.9 go fmt

    go fmt主要用于自动化格式化源码,其基本用法如下所示:

 go fmt [-n] [-x] [packages

14.10 go clean

    go clean命令主要用于删除执行其他命令产生的一些文件和目录,主要包括:

  • 删除go build命令时在当前包下生成的可执行文件
  • 删除go test命令产生的以.test做为后缀的文件

    基本用法如下所示:

go clean [clean flags] [build flags] [packages]

14.11 go doc

    go doc主要用于查询相关包、函数、方法或变量的用法,其基本用法如下所示:

go doc [doc flags] [package|[package.]symbol[.methodOrField]]

    示例用法如下所示:

C:\Users\Surpass>go doc fmt.Println
package fmt // import "fmt"

func Println(a ...any) (n int, err error)
    Println formats using the default formats for its operands and writes to
    standard output. Spaces are always added between operands and a newline
    is appended. It returns the number of bytes written and any write error
    encountered.

14.12 go mod

    go mod主要用于创建go.mod文件,可以在任何目录中使用,其基本用法如下所示:

Usage:

        go mod <command> [arguments]

The commands are:

        download    download modules to local cache
        edit        edit go.mod from tools or scripts
        graph       print module requirement graph
        init        initialize new module in current directory
        tidy        add missing and remove unused modules
        vendor      make vendored copy of dependencies
        verify      verify dependencies have expected content
        why         explain why packages or modules are needed

    常用的命令如下所示:

  • init: 在当前文件夹下初始化一个新的module,并创建go.mod文件
  • tidy: 自动分析依赖项并下载缺失的模块,也可以删除未使用的依赖项,并更新go.mod文件

    示例如下所示:

C:\Users\Surpass>go mod init surpass.net
			go: creating new go.mod: module surpass.net
			go: to add module requirements and sums:
					go mod tidy

    初始化的go.mod文件如下所示:

module surpass.net

go 1.22.5

14.13 go tool pprof

    go tool pprof主要用于Go开启过程中的性能调优,其基本用法如下所示:

go tool pprof <format> [options] [binary] <source> ...

    Golang内置了获取程序运行数据的工具,包括以下两个标准库:

  • runtime/pprof: 采集工具型应用运行数据进行分析
  • net/http/pprof: 采集服务型应用运行时数据进行分析

    pprof开启后,每隔一段时间(10ms)就会收集当前的堆栈信息,获取各个函数占用的CPU以及内存资源,然后通过对这些采样数据进行分析,形成一个性能分析报告。性能优化主要有以下几个方面:

  • CPU Profile:报告程序CPU的使用情况,按照10ms间隔去采集应用程序在CPU和寄存器上面的数据。
  • Memory Profile(Heap Profile):报告程序的内存使用情况,其实就是程序运行过程中堆内存的分配情况,默认每分配512K字节时取样一次。
  • Block Profiling: 报告goroutines不在运行状态的情况,保存用户程序中的Goroutine阻塞事件的记录,可以用来分析和查找死锁等性能瓶颈。
  • Goroutine Profiling: 报告goroutines的使用情况,有哪些roroutines,它们的调用关系是怎样的。
posted @ 2025-08-30 18:12  Surpassme  阅读(4)  评论(0)    收藏  举报