Go 语言多版本管理的最佳实践 —— Linux 和 Windows 专题20240702

Go 语言多版本管理的最佳实践 —— Linux 和 Windows 专题

引言

在软件开发的世界里,保持开发环境的最新和兼容至关重要。特别是 Go 语言,随着版本的更新,不同项目可能需要不同的 Go 版本。这时,如何在同一台机器上高效管理多个 Go 版本就成为了一个关键问题。本文将深入探讨在 Linux 和 Windows 环境下,如何通过不同的方法高效管理 Go 语言的多版本。

1. Linux 环境下的 Go 版本管理

在 Linux 系统上,我们有多种工具和方法来管理多个 Go 版本。下面将介绍三种常用的方法:使用 gvm、手动安装以及 asdf

1.1 使用 gvm(Go Version Manager)

gvm 是一个流行的工具,专门用于安装和管理多个 Go 版本。以下是使用 gvm 的详细步骤:

1.1.1 安装 gvm

首先,使用以下命令安装 gvm

bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

安装完成后,重新加载 shell:

source ~/.gvm/scripts/gvm
1.1.2 安装多个 Go 版本

使用 gvm 安装所需的 Go 版本:

gvm install go1.19.1
gvm install go1.21
1.1.3 切换 Go 版本

可以使用 gvm 切换到不同的 Go 版本:

gvm use go1.19.1
1.1.4 设置默认 Go 版本

可以将某个 Go 版本设置为默认版本:

gvm use go1.19.1 --default

1.2 手动安装多个 Go 版本

您也可以手动下载并安装多个 Go 版本,并通过修改 PATH 环境变量来切换 Go 版本。

1.2.1 安装多个 Go 版本

从 Go 官方网站下载所需的 Go 版本:https://golang.org/dl/ ,并解压缩到不同的目录,例如:

/usr/local/go1.19.1
/usr/local/go1.21
1.2.2 切换 Go 版本

通过修改 PATH 环境变量来切换 Go 版本:

# 切换到 Go 1.19.1
export PATH=/usr/local/go1.19.1/bin:$PATH
# 切换到 Go 1.21
export PATH=/usr/local/go1.21/bin:$PATH

您可以将这些命令添加到 shell 配置文件(例如 .bashrc.zshrc),以便于切换。

1.3 使用 asdf(多语言版本管理器)

asdf 是一个通用的版本管理工具,可以管理多种编程语言的版本,包括 Go。

1.3.1 安装 asdf

安装 asdf

git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.11.2

添加 asdf 到 shell 配置文件:

echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.bashrc
echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bashrc
source ~/.bashrc
1.3.2 安装 asdf Go 插件

安装 Go 插件:

asdf plugin add golang https://github.com/kennyp/asdf-golang.git
1.3.3 安装多个 Go 版本

使用 asdf 安装所需的 Go 版本:

asdf install golang 1.19.1
asdf install golang 1.21
1.3.4 切换 Go 版本

使用 asdf 切换 Go 版本:

asdf global golang 1.19.1

2. Windows 环境下的 Go 版本管理

在 Windows 上,由于无法直接运行类似 gvm 的 Linux shell 脚本,我们可以通过手动下载并解压不同版本的 Go 来实现多版本共存。以下是具体步骤:

2.1 手动下载并解压缩多个 Go 版本

  1. 下载 Go SDK 压缩包
    访问 Go 语言官网 下载所需版本的压缩包(选择 .zip 格式,如 go1.21.0.windows-amd64.zip)。

  2. 解压缩到不同目录
    将下载的压缩包解压缩到不同的目录。例如:

    • C:\Go\go1.19.1
    • C:\Go\go1.21.0

2.2 配置环境变量

为不同的 Go 版本配置环境变量,以便在需要时切换版本。

2.2.1 添加环境变量

打开 控制面板 -> 系统 -> 高级系统设置 -> 环境变量
系统变量 部分,找到并编辑 Path 变量。
添加解压缩的 Go 版本的 bin 目录。例如:

  • C:\Go\go1.19.1\bin
  • C:\Go\go1.21.0\bin
    确保您需要的 Go 版本的路径在 Path 变量的最前面。

2.3 配置 GoLand 以使用不同的 Go 版本

  1. 打开 GoLand 设置
    打开 GoLand,点击菜单栏的 File -> Settings(或者按快捷键 Ctrl + Alt + S)。

  2. 配置 SDK
    在设置窗口中,导航到 Languages & Frameworks -> Go -> GOPATH
    点击右侧的 + 按钮添加新 SDK。

  3. 选择 SDK 路径
    浏览到已解压缩的 Go SDK 目录,例如 C:\Go\go1.19.1C:\Go\go1.21.0
    选择相应的 bin 目录。

  4. 设置项目的 Go SDK 版本
    File -> Project Structure 中,选择 Project
    Project SDK 下拉菜单中,选择需要使用的 Go SDK 版本。

2.4 切换项目的 Go SDK 版本

  1. 打开项目。
  2. 进入 File -> Project Structure
  3. 选择合适的 Project SDK

3. 结论

管理多个 Go 版本已成为保持项目兼容性和开发效率的重要任务。无论是在 Linux 还是 Windows 环境下,通过使用 gvm、手动安装或 asdf 等工具,我们都可以高效地管理和切换多个 Go 版本。在 Windows 上,通过手动下载和配置环境变量,同样可以实现多版本共存。通过这些方法,开发者可以确保在同一台机器上运行不同项目时的版本兼容性和开发效率。

希望这篇指南能帮助您在不同操作系统上更加灵活地管理 Go 语言的多版本,提升开发效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/778570.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[FreeRTOS 功能应用] 事件组 功能应用

文章目录 一、基础知识点二、代码讲解三、结果演示四、代码下载 一、基础知识点 [FreeRTOS 基础知识] 事件组 概念 [FreeRTOS 内部实现] 事件组 本实验是基于STM32F103开发移植FreeRTOS实时操作系统&#xff0c;事件组实战操作。(当task1和task2同时完成&#xff0c;才执行ta…

Python爬虫教程第1篇-基础知识

文章目录 什么是爬虫爬虫的工作原理用途搜索引擎爬虫Robots协议HTTP的请求过程URL的含义HTTP常见请求头爬虫常用的技术 什么是爬虫 信息的交互是通过web网页、或者移动端等不同的客户端端形式进行交互&#xff0c;这个过程是一个人与网路正常的交互行为。而爬虫可以用来模拟人…

easyx图形库

目录 1、绘制简单的图形化窗口 2、设置窗口属性 2.1 颜色设置 2.2 刷新 3、基本绘图函数 3.1 绘制直线 3.2 绘制圆 3.3 绘制矩形 4、贴图 4.1 原样贴图 4.1.1 IMAGE变量去表示图片 4.1.2 加载图片 4.1.3 显示图片 4.2 透明贴图 4.2.1 认识素材 4.3 png贴图 5…

使用块的网络 VGG

一、AlexNet与VGG 1、深度学习追求更深更大&#xff0c;使用VGG将卷积层组合为块 2、VGG块&#xff1a;3*3卷积&#xff08;pad1&#xff0c;n层&#xff0c;m通道&#xff09;、2*2最大池化层 二、VGG架构 1、多个VGG块后接全连接层 2、不同次数的重复块得到不同的架构&a…

go语言day10 接口interface 类型断言 type关键字

接口&#xff1a; 空接口类型&#xff1a; 要实现一个接口&#xff0c;就要实现该接口中的所有方法。因为空接口中没有方法&#xff0c;所以自然所有类型都实现了空接口。那么就可以使用空接口类型变量去接受所有类型对象。 类比java&#xff0c;有点像Object类型的概念&#x…

使用Docker、Docker-compose部署单机版达梦数据库(DM8)

安装前准备 Linux Centos7安装&#xff1a;https://blog.csdn.net/andyLyysh/article/details/127248551?spm1001.2014.3001.5502 Docker、Docker-compose安装&#xff1a;https://blog.csdn.net/andyLyysh/article/details/126738190?spm1001.2014.3001.5502 下载DM8镜像 …

数据按月分表

当数据量过大&#xff0c;从数据层面可以按月分表&#xff0c;报表查询时可以根据&#xff0c;查询时间来计算查询的年月&#xff0c;查询对应的表 1、按月分表&#xff1a; 存储过程SP_BRANCH_TABLE_TEST 以下存储过程分表&#xff0c;加了索引可以方便后续查询 USE [DASHBOAR…

三分钟内了解卷轴模式

在数字化时代的浪潮中&#xff0c;卷轴商业模式巧妙地将积分体系、互动任务、社交裂变、虚拟经济体系以及个性化成长路径等多元要素融为一体。 积分体系&#xff1a;激发参与动力的源泉 卷轴商业模式的核心在于其精心构建的积分系统。新用户踏入平台&#xff0c;即获赠一笔启…

Windows上Docker的安装与初体验

Docker Desktop下载地址 国内下载地址 一、基本使用 1. 运行官方体验镜像 docker run -d -p 80:80 docker/getting-started执行成功 停止体验服务 docker stop docker/getting-started删除体验镜像 docker rmi docker/getting-started2. 修改docker镜像的存储位置 3. …

vofa+:一款超级好用的可视化串口调试软件

目录 一、软件配置 1、先配置好usart1串口 2、重定向printf: 3&#xff0c;勾选魔术棒中的LIB 二、vofa的使用 1、RawData模式 2、FireWater 一、软件配置 1、先配置好usart1串口 2、重定向printf: 在 stm32f4xx_hal.c中添加&#xff1a; #include <stdio.h> e…

【nvm管理nodejs版本,切换node指定版本】

nvm管理nodejs版本 nvm管理nodejs版本主要功能使用 nvm nvm管理nodejs版本 nvm&#xff08;Node Version Manager&#xff09;顾名思义node版本管理器&#xff0c;无须去node管网下载很多node安装程序;用于管理多个 Node.js 版本的工具。它允许你在同一台机器上同时安装和管理…

文件上传(本地、OSS)

什么是文件上传&#xff1a;将文件上传到服务器。 文件上传-本地存储 前端 <template> <div><!-- 上传文件需要设置表单的提交方式为post&#xff0c;并设置enctype属性、表单项的type属性设置为file --><form action"http://localhost:8080/wedu/…

使用Python绘制和弦图

使用Python绘制和弦图 和弦图效果代码 和弦图 和弦图用于展示数据的多对多关系&#xff0c;适合用于社交网络、交通流量等领域的分析。 效果 代码 import pandas as pd import holoviews as hv from holoviews import opts hv.extension(bokeh)# 示例数据 data [(A, B, 2),…

价格预言机的使用总结(一):Chainlink篇

文章首发于公众号&#xff1a;Keegan小钢 前言 价格预言机已经成为了 DeFi 中不可获取的基础设施&#xff0c;很多 DeFi 应用都需要从价格预言机来获取稳定可信的价格数据&#xff0c;包括借贷协议 Compound、AAVE、Liquity &#xff0c;也包括衍生品交易所 dYdX、PERP 等等。…

vb.netcad二开自学笔记1:万里长征第一步Hello CAD!

已入门的朋友请绕行&#xff01; 今天开启自学vb.net 开发autocad&#xff0c;网上相关资料太少了、太老了。花钱买课吧&#xff0c;穷&#xff01;又舍不得&#xff0c;咬牙从小白开始摸索自学吧&#xff0c;虽然注定是踏上了一条艰苦之路&#xff0c;顺便作个自学笔记备忘!积…

网络安全领域国标分类汇总大全V1.0版:共计425份标准文档,全部可免费下载

《网络安全法》、《数据安全法》、《个人信息保护法》落地实施需要大量国家标准的支撑&#xff0c;博主耗时三周时间&#xff0c;吐血整理了从1999年至今相关的所有涉及安全的国家标准&#xff0c;梳理出《网络安全领域国标分类汇总大全V1.0版》&#xff0c;共计 425 项现行标准…

深度解析 Raft 分布式一致性协议

本文参考转载至&#xff1a;浅谈 Raft 分布式一致性协议&#xff5c;图解 Raft - 白泽来了 - 博客园 (cnblogs.com) 深度解析 Raft 分布式一致性协议 - 掘金 (juejin.cn) raft-zh_cn/raft-zh_cn.md at master maemual/raft-zh_cn (github.com) 本篇文章将模拟一个KV数据读写服…

ShardingSphere实战

ShardingSphere实战 文章目录 ShardingSphere实战分库分表实战建表建表sql利用存储过程建表Sharding-jdbc分库分表配置 基于业务的Sharding-key考虑订单id用户id分片策略订单id的设计与实现**设计思想**&#xff1a;设计思路&#xff1a; 具体分片策略实现测试数据插入商户商品…

【pyqt-实训训练】串口助手

串口助手 前言一、ui设计二、ui的控件命名三、ui转py使用类的方法【扩展】使用ui文件导入&#xff01;P7的小错误解决办法 总结 前言 我的惯例就是万物之始&#xff0c;拜见吾师&#x1f970;⇨pyqt串口合集 最开始的时候我想的是&#xff0c;学了那么久的pyqt&#xff0c;我…

进程的控制-孤儿进程和僵尸进程

孤儿进程 &#xff1a; 一个父进程退出&#xff0c;而它的一个或多个子进程还在运行&#xff0c;那么那些子进程将成为孤儿进程。孤儿进程将被 init 进程( 进程号为 1) 所收养&#xff0c;并由 init 进程对它们完成状态收集工作 为了释放子进程的占用的系统资源&#xff1a; …