shell脚本批量编译golang.org/x/tools golang工具

该文展示了一个使用Bash脚本进行Go项目自动化构建的过程,脚本遍历指定目录下的子目录,对每个含有main.go的子目录执行编译并复制可执行文件到新目录,包括cmd和gopls等相关工具,最后列出新目录中的所有生成文件。

“流式”操作,客官请看:

➜  buildTmpTool pwd
/Users/likewendy/Documents/GO/src/buildTmpTool
➜  buildTmpTool ls
CONTRIBUTING.md autoBuild.sh    codereview.cfg  go              gopls           playground
LICENSE         benchmark       container       go.mod          imports         present
PATENTS         blog            copyright       go.sum          internal        refactor
README.md       cmd             cover           godoc           newDir          txtar
➜  buildTmpTool find . -name main.go | grep -v test #排除testdata那种文件夹
./cmd/present/main.go
./cmd/fiximports/main.go
./cmd/gorename/main.go
./cmd/guru/main.go
./cmd/toolstash/main.go
./cmd/compilebench/main.go
./cmd/ssadump/main.go
./cmd/godoc/main.go
./cmd/bundle/main.go
./cmd/gomvpkg/main.go
./cmd/present2md/main.go
./cmd/file2fuzz/main.go
./cmd/callgraph/main.go
./cmd/getgo/server/main.go
./cmd/getgo/main.go
./go/gcexportdata/main.go
./go/analysis/unitchecker/main.go
./go/analysis/passes/ifaceassert/cmd/ifaceassert/main.go
./go/analysis/passes/findcall/cmd/findcall/main.go
./go/analysis/passes/shadow/cmd/shadow/main.go
./go/analysis/passes/lostcancel/cmd/lostcancel/main.go
./go/analysis/passes/unmarshal/cmd/unmarshal/main.go
./go/analysis/passes/stringintconv/cmd/stringintconv/main.go
./go/analysis/passes/nilness/cmd/nilness/main.go
./go/analysis/passes/fieldalignment/cmd/fieldalignment/main.go
./go/packages/gopackages/main.go
./gopls/internal/lsp/protocol/generate/main.go
./gopls/main.go
➜  buildTmpTool touch autoBuild.sh
➜  buildTmpTool vim autoBuild.sh
#!/bin/bash

workDir=$(pwd)

mkdir newDir

path=(
"./cmd/present" 
"./cmd/fiximports"
"./cmd/gorename"
"./cmd/guru"
"./cmd/toolstash"
"./cmd/compilebench"
"./cmd/ssadump"
"./cmd/godoc"
"./cmd/bundle"
"./cmd/gomvpkg"
"./cmd/present2md"
"./cmd/file2fuzz"
"./cmd/callgraph"
"./cmd/getgo/server"
"./cmd/getgo"
"./gopls"
)

for i in ${path[@]}
do
    cd $i
    go build -o $(basename $(pwd))
    cp $(basename $(pwd)) $workDir/newDir
    cd $workDir
done

ls $workDir/newDir
➜  buildTmpTool ./autoBuild.sh  
bundle		fiximports	gopls		present2md
callgraph	getgo		gorename	server
compilebench	godoc		guru		ssadump
file2fuzz	gomvpkg		present		toolstash
➜  buildTmpTool echo "大功告成"
大功告成
➜  buildTmpTool 
### Go模块代理下载超时问题解决方案 当遇到 `i/o timeout` 或者其他网络连接问题时,可以通过设置环境变量 `GOPROXY` 来解决 Golang 模块的下载问题。以下是具体的解决方法: #### 设置 GOPROXY 环境变量 通过配置 `GOPROXY` 使用国内镜像站点可以有效缓解因网络原因导致的下载失败问题。推荐使用的镜像地址如下: - **国内阿里云**: `https://mirrors.aliyun.com/goproxy/` - **清华大学开源软件镜像站**: `https://proxy.golang.org.cn` 可以在终端临时设置该变量或者将其永久写入系统的环境变量中。 对于 Linux 和 macOS 用户,在当前会话中运行以下命令即可生效: ```bash export GOPROXY=https://mirrors.aliyun.com/goproxy/,direct ``` 如果希望此更改长期存在,则需编辑用户的 shell 配置文件(如 `.bashrc`, `.zshrc`),并追加上述命令[^2]。 Windows 用户可通过 PowerShell 执行类似的指令来设定全局环境变量: ```powershell $env:GOPROXY="https://mirrors.aliyun.com/goproxy/,direct" ``` #### 处理特定依赖项无法拉取的情况 针对某些特殊库(例如来自 `golang.org/x/tools` 的资源)可能仍然不可达的情形,可手动克隆这些仓库到本地工作区作为替代方案。具体操作流程已在参考资料中有提及[^1]^, ^[^3]。以工具链为例,执行下列 Git 命令完成所需项目的获取: ```bash git clone https://github.com/golang/tools.git $GOPATH/src/golang.org/x/tools ``` 另外需要注意的是,部分旧版 Go 工具可能会因为 API 调整而引发兼容性错误;因此建议升级至最新稳定发行版本以便获得更好的支持体验. #### 示例代码片段验证安装成功与否 下面提供了一段简单的程序用于测试您的开发环境中是否能够正常调用远程包服务功能。 ```go package main import ( "fmt" _ "golang.org/x/tools/cmd/stringer" // 测试导入外部包 ) func main() { fmt.Println("If no error occurs during compilation, the setup is correct.") } ``` 编译运行以上脚本如果没有报错则表明一切就绪! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Deng_Xian_Shemg

捐助1元钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值