#!/bin/bash # 导入公共函数 source "$(dirname "$0")/../utils/common.sh" # 安装Go install_go() { log_info "安装Go..." # 使用国内镜像获取最新版本 local GO_VERSION="go1.22.1" local GO_URL="https://mirrors.aliyun.com/golang/${GO_VERSION}.linux-amd64.tar.gz" cd /tmp # 下载并解压 if ! curl -L "$GO_URL" -o go.tar.gz; then log_error "下载Go失败" return 1 fi tar -C /usr/local -xzf go.tar.gz rm go.tar.gz # 备份现有配置 manage_config "backup" "${USER_HOME}/.zshrc" # 设置环境变量 cat >> "${USER_HOME}/.zshrc" << EOF # Go环境变量 export GOROOT=/usr/local/go export GOPATH=\$HOME/go export PATH=\$PATH:\$GOROOT/bin:\$GOPATH/bin EOF # 创建Go工作目录 mkdir -p "${USER_HOME}/go/{bin,src,pkg}" chown -R $CURRENT_USER:$CURRENT_USER "${USER_HOME}/go" # 设置环境变量以便后续使用 export GOROOT=/usr/local/go export GOPATH="${USER_HOME}/go" export PATH=$PATH:$GOROOT/bin:$GOPATH/bin log_success "Go安装完成" } # 安装常用Go工具 install_go_tools() { log_info "安装常用Go工具..." # 切换到用户目录 cd "${USER_HOME}" # 以用户身份运行命令,同时设置必要的环境变量 su - $CURRENT_USER << EOF # 设置Go环境变量 export GOROOT=/usr/local/go export GOPATH=\$HOME/go export PATH=\$PATH:\$GOROOT/bin:\$GOPATH/bin # 验证Go安装 go version || exit 1 # 设置Go代理 go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct # 安装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 EOF # 检查命令执行状态 if [ $? -ne 0 ]; then log_error "Go工具安装失败" return 1 fi log_success "Go工具安装完成" } # 配置Go configure_go() { log_info "配置Go..." # 切换到用户目录 cd "${USER_HOME}" # 创建gopls配置目录 mkdir -p "${USER_HOME}/.config/gopls" chown -R $CURRENT_USER:$CURRENT_USER "${USER_HOME}/.config" # 配置gopls cat > "${USER_HOME}/.config/gopls/settings.json" << EOF { "ui.semanticTokens": true, "formatting.local": "github.com/${CURRENT_USER}", "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_success "Go配置完成" } # 主函数 main() { # 检查root权限 check_root # 获取用户信息 get_user_info # 设置日志 setup_logging log_info "开始安装Go开发环境..." # 检查依赖 check_dependencies curl git build-essential # 安装Go install_go # 安装常用Go工具 install_go_tools # 配置Go configure_go log_success "Go开发环境安装完成!" log_info "请运行 'source ~/.zshrc' 或重新打开终端以使环境变量生效。" } # 设置清理函数 trap cleanup EXIT # 执行主函数 main