feat(env): 添加 Go 语言安装脚本
- 新增 init_go.sh 脚本,用于在 CentOS 系统上安装、卸载和清理 Go 语言环境- 脚本功能包括: - 安装必要依赖 - 下载并安装指定版本的 Go - 配置环境变量 - 验证安装 - 卸载 Go - 清理缓存 - 支持安装最新版本或指定版本的 Go - 提供详细的日志输出和错误处理
This commit is contained in:
parent
d6415babee
commit
52a911f57b
|
|
@ -0,0 +1,203 @@
|
|||
#!/bin/bash
|
||||
|
||||
# ==============================================
|
||||
# Go 语言安装脚本 for CentOS
|
||||
# 版本:1.3
|
||||
# 作者:您的名字
|
||||
# ==============================================
|
||||
|
||||
# 启用严格模式
|
||||
set -euo pipefail
|
||||
|
||||
# --------------------------
|
||||
# 配置区(可根据需要修改)
|
||||
# --------------------------
|
||||
GO_VERSION="1.22.0" # 默认安装版本
|
||||
INSTALL_DIR="/usr/local" # 安装目录
|
||||
GOPATH="$HOME/go" # GOPATH 设置
|
||||
PROFILE_FILE="/etc/profile.d/go.sh" # 环境变量文件
|
||||
|
||||
# --------------------------
|
||||
# 颜色定义
|
||||
# --------------------------
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[0;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" >&2
|
||||
}
|
||||
|
||||
# --------------------------
|
||||
# 检查root权限
|
||||
# --------------------------
|
||||
check_root() {
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
log_error "请使用root用户或通过sudo运行此脚本"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# --------------------------
|
||||
# 安装依赖
|
||||
# --------------------------
|
||||
install_deps() {
|
||||
log_info "正在安装必要依赖..."
|
||||
yum install -y curl tar gzip wget git make gcc
|
||||
}
|
||||
|
||||
# --------------------------
|
||||
# 获取最新Go版本
|
||||
# --------------------------
|
||||
get_latest_version() {
|
||||
log_info "正在获取最新Go版本..."
|
||||
local latest
|
||||
latest=$(curl -s https://go.dev/VERSION?m=text | head -1)
|
||||
if [[ "$latest" =~ ^go[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
GO_VERSION="${latest#go}"
|
||||
log_info "检测到最新版本: ${GO_VERSION}"
|
||||
else
|
||||
log_warn "无法获取最新版本,使用默认版本: ${GO_VERSION}"
|
||||
fi
|
||||
}
|
||||
|
||||
# --------------------------
|
||||
# 下载Go安装包
|
||||
# --------------------------
|
||||
download_go() {
|
||||
local url="https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz"
|
||||
local tmp_file="/tmp/go${GO_VERSION}.tar.gz"
|
||||
|
||||
if [ -f "$tmp_file" ]; then
|
||||
log_info "发现本地缓存安装包,跳过下载"
|
||||
return
|
||||
fi
|
||||
|
||||
log_info "正在下载Go ${GO_VERSION}..."
|
||||
if ! curl -fSL --progress-bar -o "$tmp_file" "$url"; then
|
||||
log_error "下载失败,请检查网络连接或版本是否存在"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# --------------------------
|
||||
# 安装Go
|
||||
# --------------------------
|
||||
install_go() {
|
||||
local tmp_file="/tmp/go${GO_VERSION}.tar.gz"
|
||||
|
||||
log_info "正在安装Go到 ${INSTALL_DIR}..."
|
||||
tar -C "$INSTALL_DIR" -xzf "$tmp_file"
|
||||
rm -f "$tmp_file"
|
||||
}
|
||||
|
||||
# --------------------------
|
||||
# 配置环境变量
|
||||
# --------------------------
|
||||
setup_env() {
|
||||
log_info "正在配置环境变量..."
|
||||
|
||||
# 创建环境变量文件
|
||||
cat > "$PROFILE_FILE" <<EOF
|
||||
export GOROOT=${INSTALL_DIR}/go
|
||||
export GOPATH=${GOPATH}
|
||||
export PATH=\$GOROOT/bin:\$GOPATH/bin:\$PATH
|
||||
EOF
|
||||
|
||||
# 立即生效
|
||||
source "$PROFILE_FILE"
|
||||
|
||||
# 创建GOPATH目录
|
||||
mkdir -p "${GOPATH}/"{src,bin,pkg}
|
||||
}
|
||||
|
||||
# --------------------------
|
||||
# 验证安装
|
||||
# --------------------------
|
||||
verify_install() {
|
||||
log_info "验证安装..."
|
||||
if ! command -v go &> /dev/null; then
|
||||
log_error "Go安装失败,请检查错误"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "\n${GREEN}Go安装成功!${NC}"
|
||||
echo "============================="
|
||||
go version
|
||||
echo "GOROOT: $(go env GOROOT)"
|
||||
echo "GOPATH: $(go env GOPATH)"
|
||||
echo "============================="
|
||||
}
|
||||
|
||||
# --------------------------
|
||||
# 卸载Go
|
||||
# --------------------------
|
||||
uninstall_go() {
|
||||
log_info "正在卸载Go..."
|
||||
rm -rf "${INSTALL_DIR}/go"
|
||||
rm -f "$PROFILE_FILE"
|
||||
log_info "Go已卸载"
|
||||
}
|
||||
|
||||
# --------------------------
|
||||
# 清理缓存
|
||||
# --------------------------
|
||||
clean_cache() {
|
||||
log_info "正在清理缓存..."
|
||||
rm -f "/tmp/go${GO_VERSION}.tar.gz"
|
||||
log_info "缓存已清理"
|
||||
}
|
||||
|
||||
# --------------------------
|
||||
# 主函数
|
||||
# --------------------------
|
||||
main() {
|
||||
case "$1" in
|
||||
install)
|
||||
check_root
|
||||
install_deps
|
||||
|
||||
# 如果想安装最新版本,取消下面注释
|
||||
# get_latest_version
|
||||
|
||||
download_go
|
||||
install_go
|
||||
setup_env
|
||||
verify_install
|
||||
|
||||
log_info "安装完成!请重新登录或运行 'source ${PROFILE_FILE}' 使环境变量生效"
|
||||
;;
|
||||
uninstall)
|
||||
check_root
|
||||
uninstall_go
|
||||
;;
|
||||
clean)
|
||||
clean_cache
|
||||
;;
|
||||
*)
|
||||
echo "用法: $0 {install|uninstall|clean}"
|
||||
echo " install 安装Go"
|
||||
echo " uninstall 卸载Go"
|
||||
echo " clean 清理缓存"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# --------------------------
|
||||
# 执行主函数
|
||||
# --------------------------
|
||||
main "$@"
|
||||
exit 0
|
||||
Loading…
Reference in New Issue