分享
  1. 首页
  2. 主题
  3. Go Web框架

一个脚本升级golang1.25

188225606 · · 2060 次点击 · 开始浏览 置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

![企业微信截图_20250818101256.png](https://static.golangjob.cn/250818/420e74c52caa2436d29292d5e96e3c01.png) (golang一站式框架, 支持api,web,定时任务,消息消费,常用数据库,日志,监控等)[https://github.com/micro-plat/hydra] ```python #!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import sys import argparse import tarfile import tempfile import shutil import subprocess from urllib.request import urlopen, Request from urllib.error import URLError def find_go_install_path(): """查找当前Go安装路径""" # 尝试从环境变量获取 go_root = os.environ.get('GOROOT') if go_root and os.path.exists(go_root): return go_root # 尝试常见安装路径 common_paths = [ '/usr/local/go', # 默认安装路径 '/usr/lib/go', '/opt/go', os.path.expanduser('~/go') # 用户目录安装 ] for path in common_paths: if os.path.exists(path): return path # 尝试通过which查找 try: go_bin_path = subprocess.check_output(['which', 'go'], text=True).strip() if go_bin_path: return os.path.dirname(os.path.dirname(go_bin_path)) except subprocess.CalledProcessError: pass raise FileNotFoundError("无法找到Go安装目录,请手动指定或检查安装") def download_with_progress(url, destination): """带进度条的下载函数""" req = Request(url, headers={'User-Agent': 'Mozilla/5.0'}) try: with urlopen(req) as response: total_size = int(response.headers.get('Content-Length', 0)) block_size = 8192 downloaded = 0 print(f"下载中: {os.path.basename(url)}") print(f"文件大小: {total_size / (1024*1024):.2f} MB") with open(destination, 'wb') as f: while True: chunk = response.read(block_size) if not chunk: break f.write(chunk) downloaded += len(chunk) # 进度显示 percent = downloaded / total_size * 100 if total_size > 0 else 0 progress_bar = '#' * int(percent / 2) # 50个字符的进度条 sys.stdout.write(f"\r[{progress_bar.ljust(50)}] {percent:.1f}% ({downloaded/(1024*1024):.2f}MB)") sys.stdout.flush() print("\n下载完成!") return True except URLError as e: print(f"\n下载失败: {e.reason}") return False def main(): parser = argparse.ArgumentParser(description='Go语言版本升级工具') parser.add_argument('url', type=str, help='Go安装包下载URL') args = parser.parse_args() # 检查root权限 if os.geteuid() != 0: print("请使用sudo运行此脚本") sys.exit(1) # 查找当前安装路径 try: install_path = find_go_install_path() print(f"当前Go安装路径: {install_path}") except FileNotFoundError as e: print(e) sys.exit(1) # 创建临时目录 temp_dir = tempfile.mkdtemp() download_path = os.path.join(temp_dir, os.path.basename(args.url)) try: # 下载文件 if not download_with_progress(args.url, download_path): sys.exit(1) # 备份旧版本 backup_path = f"{install_path}.bak" if os.path.exists(backup_path): shutil.rmtree(backup_path) shutil.move(install_path, backup_path) print(f"已备份旧版本到: {backup_path}") # 解压新版本 print("正在安装新版本...") with tarfile.open(download_path, 'r:gz') as tar: # 解压到父目录 parent_dir = os.path.dirname(install_path) tar.extractall(path=parent_dir) # 验证安装 new_go_path = os.path.join(parent_dir, 'go') if not os.path.exists(new_go_path): print("安装失败: 解压后未找到go目录") # 恢复备份 shutil.rmtree(new_go_path, ignore_errors=True) shutil.move(backup_path, install_path) print("已恢复旧版本") sys.exit(1) print("安装成功!") print(f"新版本路径: {new_go_path}") # 验证版本 print("\n验证新版本:") os.environ['PATH'] = f"{new_go_path}/bin:{os.environ['PATH']}" subprocess.call(['go', 'version']) finally: # 清理临时文件 shutil.rmtree(temp_dir, ignore_errors=True) print("临时文件已清理") if __name__ == "__main__": main() ``` (golang一站式框架, 支持api,web,定时任务,消息消费,常用数据库,日志,监控等)[https://github.com/micro-plat/hydra]

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
2060 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)