学习 GO 过程中用过的命令
把用过的命令写下来,方便以后查找
下载 GO 及验证
查看版本
安装 protoc
安装 gRPC 框架及插件
g 命令行工具
go 的一些命令
build 命令
下载 GO 及验证
验证也很关键,当我用socks5代理时,wget命令不支持,然后用了curl,最后验证码对不上,现今我也没明白原因
$ wget -P /usr/local/go https://go.dev/dl/go1.23.4.linux-amd64.tar.gz
$ cd /usr/local/go
$ sha256sum go1.23.4.linux-amd64.tar.gz
$ tar -C /usr/local -xzf go1.23.4.linux-amd64.tar.gz
查看版本
$ go version
安装 protoc
- windowns
在
https://github.com/protocolbuffers/protobuf/releases选择合适版本下载,要放到go环境变量目录,bin文件放到 go\bin,include 与 bin 同级 - linux
$ apt update $ apt install protobuf-compiler
验证
protoc --version
安装 gRPC 框架及插件
$ go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
$ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
$ go get google.golang.org/grpc //在模块内使用
$ protoc-gen-go --version
生成原文件目录的 proto 文件
$ protoc --go_out=paths=source_relative:. *.proto
$ protoc --go_out=paths=source_relative:. .\app\dns\fakedns\*.proto
生成目录及子目录的所有 proto 文件到原文件路径
- windowns
$ $currentDirectory = Get-Location $ Get-ChildItem -Recurse -Filter *.proto | ForEach-Object { protoc --go_out=paths=source_relative:. $_.FullName.Replace($currentDirectory, '.') }
- liunx
$ find . -name "*.proto" | xargs protoc --go_out=paths=source_relative:. *.proto
输出grpc文件
$ protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative *.proto
$ go clean -i -cache
$ go build
g 命令行工具
g 是一个用于管理 Go 语言多个版本的命令行工具,它允许你在同一台机器上安装和切换不同的 Go 版本。
安装:
- windows
https://github.com/voidint/g/releases下载相应的 g.exe 文件。 - linux
$ wget -qO - https://raw.githubusercontent.com/voidint/g/master/install.sh | bash
安装完后,配置环境变量: 将 ~/.g/bin 添加到 PATH 环境变量中。验证安装 g version
g 命令
$ g ls 查询已安装的 go 版本
$ g ls-remote stable 查询当前可供安装的stable状态的 go 版本
$ g ls-remote 查询可供安装的所有 go 版本
$ g install 1.23.2 安装目标 go 版本 1.23.2
$ g use 1.16 切换到另一个已安装的 go 版本
$ g uninstall 1.16 卸载一个已安装的 go 版本
$ g clean 清空 go 安装包文件缓存
$ g self update 更新 g 软件本身
$ g self uninstall 卸载 g 软件本身
$ g -v 查询 g 版本信息
go 的一些命令
$ go mod init example.com/example 建立 mod 文件
$ go mod edit -replace example.com/example=../example 改路径必须是本地目录 ../../ 表示上两层目录
$ go mod tidy 加载同步模块依赖项
$ go run . 目录下执行程序
$ go build 目录下编译程序 -o 输出的文件
$ .\hello.exe windows下执行当前目录下文件
$ ./hello linux下执行当前目录下文件
$ go list -f '{{.Target}}' 发现安装路径
$ go get 命令添加依赖项
build 命令
设置环境变量,实现交叉编译,在 windows8.1 下的 vscode 中,只有 Set-Item Env 命令起作用,其他在 powshell 中请自行研究
$ Set-Item Env:CGO_ENABLED "0" 不检查 c 代码的依赖库, "1" 为检查
$ Set-Item Env:GOOS "windows" 其他为 "linux" "android"
$ Set-Item Env:GOARCH "amd64" 在 "android" 中 必须设为 "arm64" 之前这两字符有点象,
我没留意设置 "arm64",搞到死活要检查我的 c 依赖库
-trimpath 从构建的二进制文件中移除所有文件系统路径
-ldflags 参数用于将链接器标志传递给链接器
"-s -w -buildid=" 这里传递了三个标志, -s 移除符号表和调试信息, -w 移除 DWARF 调试信息,
-buildid= 设置构建 ID 为空字符串,移除构建 ID
go build -o ../run/agz -trimpath -ldflags "-s -w -buildid=" ./main