You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
4.5 KiB
174 lines
4.5 KiB
#!/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 ""
|