为什么Golang没有内置的go update命令?
为什么Golang没有内置的go update命令?
我是Go语言的新手,我想知道为什么没有一个像 go update 这样的命令来将当前的语言版本更新到最新版本。我搜索后发现,每次你想更新Go版本时,都必须手动重复同样的过程(有时你需要移除当前版本并重新安装最新版本)。
我有Rust的背景,在那里有一个简单的命令来更新版本,只需在终端中输入:
rustup update
我真的很想知道在Go中是否有办法做同样的事情?
您可以使用像 asdf-vm 这样的版本管理器来管理您的 Go 版本。
更多关于为什么Golang没有内置的go update命令?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
所以从2009年开始就没有内置的解决方案吗?为什么会这样?
顺便提一下,我通过 Homebrew 安装了 Go,多年来它让我能够轻松实现自动更新。
Rust 中也没有内置。Rustup 是一个外部版本管理器,碰巧由同一个基金会维护。但它不是语言或语言工具链的一部分。
难道没有任何关于此事的提案吗?这对于手动解决方案来说工作量太大了。我认为如果他们能在其CLI中包含一个更新命令会更好。
我知道,但它是内置的。你不需要每次手动安装新版本Go的麻烦。当我安装Go 1.18时,我不得不做很多工作,包括使用’rm’手动删除当前版本。
我认为将其纳入生态系统是合适的,我认为这样更好
作为一名多语言开发者,我无论如何都更倾向于使用统一的工具,而不是为每种语言都不得不使用另一个版本管理器。
Asdf 和 nix 很好地满足了这一需求。在我看来,没有必要为又一个新潮事物投入资源。
不过,我同意,如果没有版本管理器,安装、升级和卸载的过程确实不太理想。即使没有及时更新的软件仓库,也应该提供合适的 DEB 和 RPM 包。
是的——如果你使用的是 Windows,你可以使用 Chocolatey:
Go 编程语言 1.18.4
Go 编程语言是一个旨在提高程序员生产力的开源项目。
……而我使用基于 ARCH 的 Linux 发行版,Go 在 AUR 中:
https://archlinux.org/packages/community/x86_64/go/
我其实一直不太在意 Go 没有专门的二进制包管理器,因为我使用的每个操作系统都有一个为我打包 Go 的包管理器。我搜索了一下,看看是否有人为此提出过提案,结果一无所获,所以我猜想这对大多数人来说并不在考虑范围内。话虽如此,我能理解这对某些人来说会很有用。
Go语言没有内置的go update命令,主要是因为Go团队采用了不同的版本管理策略。Go的版本更新通常需要手动下载和安装新版本,而不是通过一个内置命令来更新。这与Rust的rustup工具不同,rustup是一个独立的版本管理工具,而Go选择将版本管理交给用户或系统包管理器。
不过,你可以使用第三方工具来简化Go版本的更新过程。例如,goup是一个流行的Go版本管理工具,它可以让你轻松安装和切换不同版本的Go。以下是一个使用goup的示例:
首先,安装goup:
go install go.jetpack.io/goup@latest
然后,使用goup更新Go到最新版本:
goup update
或者,你也可以使用goup安装特定版本的Go:
goup install 1.21.0
如果你不想使用第三方工具,也可以手动更新Go版本。例如,在Linux或macOS上,你可以使用以下命令下载并安装最新版本的Go:
# 下载最新版本的Go
wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
# 移除旧版本(如果需要)
sudo rm -rf /usr/local/go
# 解压新版本
sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
在Windows上,你可以下载MSI安装程序并运行它来更新Go版本。
总之,虽然Go没有内置的go update命令,但你可以通过第三方工具或手动下载安装包来更新Go版本。
略有不同但相关。我想更新dlv。 最终我这样做了:
~> go get -u github.com/go-delve/delve/cmd/dlv
~> find ~/go -type d -name delve
/home/marc/go/pkg/mod/cache/download/github.com/go-delve/delve
~> ll /home/marc/go/pkg/mod/cache/download/github.com/go-delve/delve/@v/v1.9.0.zip
-rw------- 1 marc marc 7409639 Jul 19 20:41 /home/marc/go/pkg/mod/cache/download/github.com/go-delve/delve/@v/v1.9.0.zip
~> mkdir /tmp/dlv
~> cd /tmp/dlv
dlv> unzip /home/marc/go/pkg/mod/cache/download/github.com/go-delve/delve/@v/v1.9.0.zip
dlv> find . -type d -name dlv
./github.com/go-delve/delve@v1.9.0/cmd/dlv
dlv> cd /tmp/dlv/github.com/go-delve/delve@v1.9.0/cmd/dlv/
dlv> go mod init dlv
dlv> go mod tidy
dlv> go build
dlv> mv ~/go/bin/dlv ~/go/bin/dlv.1.8.0
dlv> mv dlv ~/go/bin/dlv
dlv> cd ~
~> rm -rf /tmp/dlv
~> type dlv
dlv is hashed (/home/marc/go/bin/dlv)
~> dlv version
Delve Debugger
Version: 1.9.0
Build: $Id: 69310c2f438e492f892d6af22e8e62c8ea1e9d8d $
我是不是漏掉了什么明显的东西?

