#!/bin/bash # Go 环境安装脚本 (Linux/macOS) # 适用于 Ubuntu/CentOS/macOS set -e GO_VERSION="1.21.6" INSTALL_DIR="/usr/local" # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' CYAN='\033[0;36m' NC='\033[0m' # No Color # 检测操作系统 OS="" ARCH=$(uname -m) if [[ "$OSTYPE" == "linux-gnu"* ]]; then OS="linux" if [[ "$ARCH" == "x86_64" ]]; then ARCH="amd64" elif [[ "$ARCH" == "aarch64" ]]; then ARCH="arm64" fi elif [[ "$OSTYPE" == "darwin"* ]]; then OS="darwin" if [[ "$ARCH" == "x86_64" ]]; then ARCH="amd64" elif [[ "$ARCH" == "arm64" ]]; then ARCH="arm64" fi else echo -e "${RED}不支持的操作系统: $OSTYPE${NC}" exit 1 fi echo -e "${CYAN}==============================================${NC}" echo -e "${CYAN} Go ${GO_VERSION} 环境安装脚本 (${OS}/${ARCH}) ${NC}" echo -e "${CYAN}==============================================${NC}" echo "" # 检查当前 Go 版本 echo -e "${YELLOW}[1/6] 检查当前 Go 版本...${NC}" if command -v go &> /dev/null; then CURRENT_VERSION=$(go version) echo -e "${GREEN} 检测到已安装: $CURRENT_VERSION${NC}" read -p " 是否重新安装? (y/N): " response if [[ ! "$response" =~ ^[Yy]$ ]]; then echo -e "${GRAY} 跳过安装${NC}" exit 0 fi else echo -e " 未检测到 Go" fi # 下载安装包 echo -e "${YELLOW}[2/6] 下载 Go ${GO_VERSION} ...${NC}" DOWNLOAD_URL="https://go.dev/dl/go${GO_VERSION}.${OS}-${ARCH}.tar.gz" TEMP_FILE="/tmp/go${GO_VERSION}.${OS}-${ARCH}.tar.gz" echo " 下载地址: $DOWNLOAD_URL" if command -v wget &> /dev/null; then wget -q --show-progress "$DOWNLOAD_URL" -O "$TEMP_FILE" elif command -v curl &> /dev/null; then curl -L --progress-bar "$DOWNLOAD_URL" -o "$TEMP_FILE" else echo -e "${RED}错误: 需要 wget 或 curl${NC}" exit 1 fi if [ ! -f "$TEMP_FILE" ]; then echo -e "${RED}下载失败${NC}" exit 1 fi FILE_SIZE=$(du -h "$TEMP_FILE" | cut -f1) echo -e "${GREEN} 下载完成: $FILE_SIZE${NC}" # 删除旧版本 echo -e "${YELLOW}[3/6] 清理旧版本...${NC}" if [ -d "$INSTALL_DIR/go" ]; then echo " 删除旧版本..." sudo rm -rf "$INSTALL_DIR/go" fi # 解压安装 echo -e "${YELLOW}[4/6] 安装 Go...${NC}" echo " 解压到 $INSTALL_DIR ..." sudo tar -C "$INSTALL_DIR" -xzf "$TEMP_FILE" if [ ! -d "$INSTALL_DIR/go/bin" ]; then echo -e "${RED}安装失败${NC}" exit 1 fi echo -e "${GREEN} 安装完成${NC}" # 配置环境变量 echo -e "${YELLOW}[5/6] 配置环境变量...${NC}" # 检测 shell SHELL_NAME=$(basename "$SHELL") RC_FILE="" if [[ "$SHELL_NAME" == "bash" ]]; then RC_FILE="$HOME/.bashrc" elif [[ "$SHELL_NAME" == "zsh" ]]; then RC_FILE="$HOME/.zshrc" else RC_FILE="$HOME/.profile" fi # 检查是否已配置 if ! grep -q "export PATH=.*go/bin" "$RC_FILE" 2>/dev/null; then echo "" >> "$RC_FILE" echo "# Go 环境配置" >> "$RC_FILE" echo "export PATH=\$PATH:$INSTALL_DIR/go/bin" >> "$RC_FILE" echo "export GOPATH=\$HOME/go" >> "$RC_FILE" echo "export PATH=\$PATH:\$GOPATH/bin" >> "$RC_FILE" echo "export GOPROXY=https://goproxy.cn,direct" >> "$RC_FILE" echo -e "${GREEN} 环境变量已添加到 $RC_FILE${NC}" else echo -e " 环境变量已存在" fi # 创建 GOPATH 目录 mkdir -p "$HOME/go/bin" mkdir -p "$HOME/go/pkg" mkdir -p "$HOME/go/src" # 验证安装 echo -e "${YELLOW}[6/6] 验证安装...${NC}" export PATH=$PATH:$INSTALL_DIR/go/bin export GOPATH=$HOME/go if command -v go &> /dev/null; then VERSION=$(go version) echo -e "${GREEN} Go 版本: $VERSION${NC}" GOPATH_VAL=$(go env GOPATH) echo -e "${GREEN} GOPATH: $GOPATH_VAL${NC}" GOPROXY_VAL=$(go env GOPROXY) echo -e "${GREEN} GOPROXY: $GOPROXY_VAL${NC}" else echo -e "${RED} 验证失败${NC}" fi # 清理 echo "[清理] 删除安装包..." rm -f "$TEMP_FILE" echo "" echo -e "${CYAN}==============================================${NC}" echo -e "${CYAN} Go 安装完成! ${NC}" echo -e "${CYAN}==============================================${NC}" echo "" echo -e "${YELLOW}请运行以下命令使环境变量生效:${NC}" echo " source $RC_FILE" echo "" echo -e "${YELLOW}然后验证安装:${NC}" echo " go version" echo "" echo -e "${YELLOW}接下来可以启动行情数据服务:${NC}" echo " cd d:\fs_workspace\market-data-service" echo " go run ./cmd/server" echo ""