子兮子兮 子兮子兮

No can, but will.

目录
GO 语言常用终端命令
/        

GO 语言常用终端命令

环境

  • 操作系统:windows
  • GO 版本:1.19

本文占位符说明

  • ProjectRoot:GO 项目源码根路径;
  • ProjectName:GO 项目名称;
  • %GOROOT%:GO SDK 安装目录环境变量,unix 中为 $GOROOT

安装 GO 程序最新版到 %GOPATH%/bin

1go install github.com/google/gops@latest

直接编译运行某 GO 程序的指定版本命令

1go run github.com/swaggo/swag/cmd/swag@v1.8.1 fmt

查看当前目录下所有的包

1# cd ProjectRoot
2
3go list ./...
展开/收起输出内容
1ProjectName
2ProjectName/assets
3ProjectName/config
4ProjectName/database
5ProjectName/initialization
6ProjectName/middleware

查看 GO 程序文件的编译信息

1# go install github.com/google/gops@latest
2# cd %GOROOT%/bin
3
4go version -m gops.exe
展开/收起输出内容
 1gops.exe: go1.19
 2        path    github.com/google/gops
 3        mod     github.com/google/gops  v0.3.25 h1:Pf6uw+cO6pDhc7HJ71NiG0x8dyQTeQcmg3HQFF39qVw=
 4        dep     github.com/go-ole/go-ole        v1.2.6  h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
 5        dep     github.com/keybase/go-ps        v0.0.0-20190827175125-91aafc93ba19      h1:WjT3fLi9n8YWh/Ih8Q1LHAPsTqGddPcHqscN+PJ3i68=
 6        dep     github.com/shirou/gopsutil/v3   v3.22.4 h1:srAQaiX6jX/cYL6q29aE0m8lOskT9CurZ9N61YR3yoI=
 7        dep     github.com/xlab/treeprint       v1.1.0  h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk=
 8        dep     github.com/yusufpapurcu/wmi     v1.2.2  h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
 9        dep     golang.org/x/sys        v0.0.0-20220520151302-bc2c85ada10a      h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k=
10        build   -compiler=gc
11        build   CGO_ENABLED=0
12        build   GOARCH=amd64
13        build   GOOS=windows
14        build   GOAMD64=v1

静态检查

1# cd ProjectRoot
2
3go run honnef.co/go/tools/cmd/staticcheck@latest -f stylish ./...
展开/收起输出内容
1✖ 0 problems (0 errors, 0 warnings, 0 ignored)

另一个静态检查命令

1go run github.com/mgechev/revive@latest -exclude ./vendor/... -formatter stylish ./...

此命令默认行为对命名检查比较严格,比如 Api 必须写为 APIHttp 必须写为 HTTPId 必须写为 IDSql 必须写为 SQL 等等,
可以在配置文件中配置 [rule.var-naming] 白名单以便排除相关命名检查,如:

1# revive.toml
2
3[rule.var-naming]
4  arguments = [["API", "SQL"], ["VM"]]

配置项 [rule.var-naming] 的参数类型为 [2][]string,第一个子切片为白名单,第二个子切片为黑名单。使用示例:

1go run github.com/mgechev/revive@latest -config ./revive.toml -exclude ./vendor/... -formatter stylish ./...

漏洞检查

1# 在项目根目录执行:
2go run golang.org/x/vuln/cmd/govulncheck@latest ./...

GO 文档服务

1# cd ProjectRoot
2
3go run golang.org/x/tools/cmd/godoc@latest -http=:6060 -index
4
5# start http://127.0.0.1:6060/pkg/

GO 模块

初始化 GO 模块

1# mkdir ProjectName & cd ProjectName
2
3go mod init ProjectName

下载 GO 模块依赖

1go mod download

整理 GO 模块依赖

1go mod tidy

添加 GO 模块依赖

1go get github.com/godoes/go-figure

更新指定 GO 模块依赖

1go get -d -u github.com/godoes/go-figure

更新全部 GO 模块依赖

1go get -d -u

导入模块依赖到 vendor 目录

1go mod vendor

使用批处理命令判断 GO 版本

 1rem 获取 go 版本
 2set gv=99999999999999999999
 3for /f "tokens=*" %%i in ('go version') do (
 4    set gv=%%i
 5)
 6set ver=%gv:~13,5%
 7:del-right
 8if "%ver:~-1%" equ "." set ver=%ver:~0,-1%&&goto del-right
 9if "%ver:~-1%" equ " " set ver=%ver:~0,-1%&&goto del-right
10:goon
11rem go 版本不能小于 1.18
12if %ver% leq 1.17 (
13  color 04
14  echo. & echo 请使用 go1.18 或以上版本! & echo.
15  pause & exit
16)
17
18rem TODO more things...
19go version
20pause

使用批处理命令和链接目录动态修改 GO 版本

将以下代码保存为 GOROOT.bat,双击运行,输入本地已安装或解压的 go 版本,可以在保持 GOROOT 不变的前提下来动态切换 GO 版本:

 1@echo off
 2title 修改 GOROOT 链接路径
 3
 4rem 如果是 setx "GOROOT" "D:\Dev\Go\SDK\go" /m 需要使用管理员权限运行
 5setx "GOROOT" "D:\Dev\Go\SDK\go"
 6go version
 7echo.
 8
 9set /p ver=请输入 GO 版本(如 1.17.13):
10echo.
11
12echo 开始切换 [go%ver%] 根路径:
13echo.
14
15rem 删除旧链接路径
16rmdir %GOROOT%
17rem 关联新链接路径
18mklink /J "%GOROOT%" "D:\Dev\Go\SDK\versions\go%ver%"
19echo.
20
21go version
22echo.
23
24pause

比如 GOROOT 路径固定为 D:\Dev\Go\SDK\go,安装的多个 go 版本路径分别为:

  • D:\Dev\Go\SDK\versions\go1.17.13
  • D:\Dev\Go\SDK\versions\go1.18.5
  • D:\Dev\Go\SDK\versions\go1.19.1

运行 GOROOT.bat 输入 1.18.5 即可切换到 go1.18.5,输入 1.19.1 即可切换到 go1.19.1

 1成功: 指定的值已得到保存。
 2go version go1.17.13 windows/amd64
 3
 4请输入 GO 版本(如 1.17.13):1.18.5
 5
 6开始切换 [go1.18.5] 根路径:
 7
 8为 D:\Dev\Go\SDK\go <<===>> D:\Dev\Go\SDK\versions\go1.18.5 创建的联接
 9
10go version go1.18.5 windows/amd64
11
12请按任意键继续. . .
 1成功: 指定的值已得到保存。
 2go version go1.18.5 windows/amd64
 3
 4请输入 GO 版本(如 1.17.13):1.19.1
 5
 6开始切换 [go1.19.1] 根路径:
 7
 8为 D:\Dev\Go\SDK\go <<===>> D:\Dev\Go\SDK\versions\go1.19.1 创建的联接
 9
10go version go1.19.1 windows/amd64
11
12请按任意键继续. . .

GO 版本管理工具命令

上述 GOROOT.bat 还是需要先手动下载安装或解压 GO 后才可以使用,如果有一个可以查看所有可安装的版本、自动下载安装或卸载、查看本地已安装的版本和切换到指定版本的 GO 版本管理工具,那就完美了。

这不,https://github.com/voidint/g 就是这样一个实用的工具:

 1go run github.com/voidint/g@latest -h
 2
 3NAME:
 4  g - Golang Version Manager
 5
 6 USAGE:
 7  g.exe  command [arguments...]
 8
 9 VERSION:
10  1.4.0
11
12 AUTHOR:
13  voidint <voidint@126.com>
14
15 COMMANDS:
16    ls         List installed versions
17    ls-remote  List remote versions available for install
18    use        Switch to specified version
19    install    Download and install a version
20    uninstall  Uninstall a version
21    update     Fetch the newest version of g
22    clean      Remove files from the package download directory
23    help, h    Shows a list of commands or help for one command
24
25 GLOBAL OPTIONS:
26  --help, -h     show help (default: false)
27  --version, -v  print the version (default: false)
28
29 COPYRIGHT:
30  Copyright (c) 2019-2022, voidint. All rights reserved.

在国内不 KXSW 的情况下,需要设置 G_MIRROR 环境变量为国内 GO 下载镜像地址:

1G_MIRROR=https://golang.google.cn/dl/

如果需要自定义此 GO 版本管理工具的 GO 安装包下载和安装路径,需要设置以下环境变量:

1G_EXPERIMENTAL=true
2G_HOME=D:\Dev\Go\SDK

内容声明
标题: GO 语言常用终端命令
链接: https://zixizixi.cn/go-command 来源: iTanken
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可,转载请保留此声明


我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=wh4u6zpyhe1d