#!/bin/bash # 设置错误时立即退出 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 日志函数 log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 安装Go install_go() { log_info "安装Go..." # 下载最新版本的Go GO_VERSION=$(curl -s https://golang.org/VERSION?m=text) GO_URL="https://golang.org/dl/${GO_VERSION}.linux-amd64.tar.gz" # 下载并解压 curl -L $GO_URL -o /tmp/go.tar.gz tar -C /usr/local -xzf /tmp/go.tar.gz rm /tmp/go.tar.gz # 设置环境变量 cat >> ~/.zshrc << EOF # Go环境变量 export GOROOT=/usr/local/go export GOPATH=\$HOME/go export PATH=\$PATH:\$GOROOT/bin:\$GOPATH/bin EOF # 创建Go工作目录 mkdir -p ~/go/{bin,src,pkg} log_info "Go安装完成" } # 安装常用Go工具 install_go_tools() { log_info "安装常用Go工具..." # 安装gopls go install golang.org/x/tools/gopls@latest # 安装delve调试器 go install github.com/go-delve/delve/cmd/dlv@latest # 安装air热重载工具 go install github.com/cosmtrek/air@latest # 安装mockgen go install github.com/golang/mock/mockgen@latest # 安装protoc-gen-go go install google.golang.org/protobuf/cmd/protoc-gen-go@latest go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest log_info "Go工具安装完成" } # 配置Go configure_go() { log_info "配置Go..." # 设置Go代理 go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct # 配置gopls cat > ~/.config/gopls/settings.json << EOF { "ui.semanticTokens": true, "formatting.local": "github.com/your-username", "completion.placeholder": true, "hover.documentation": true, "hover.diagnostics": true, "codeLens.documentLink": true, "codeLens.references": true, "codeLens.implementations": true, "codeLens.typeDefinitions": true, "codeLens.commands": true } EOF log_info "Go配置完成" } # 主函数 main() { log_info "开始安装Go开发环境..." # 安装Go install_go # 安装常用Go工具 install_go_tools # 配置Go configure_go log_info "Go开发环境安装完成!" log_info "请运行 'source ~/.zshrc' 或重新打开终端以使环境变量生效。" } # 执行主函数 main