成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

還能這樣玩?Go 將會增強 Go1 向前兼容性

開發 前端
在今天這篇文章中,我們介紹了 Go1 兼容性增強中的 “向前兼容” 部分,其中要點是:加大對 go.mod 文件中的 go 行和 toolchain 行和工具鏈 GOTOOLCHAIN 相關的應用。

大家好,我是煎魚。新春快樂呀!

年前我們在《醒醒吧,未來不會有 Go2 了!》文章中討論了 Go2 的未來,明確了未來是以 Go1.x.y 為主的 Go1 時代。

為了實現這個北極星目標,Go 團隊采取的策略分別是:增強 Go1 向后兼容(在前文已分享)和 Go1 向前兼容(本文重點內容)。

本次要提到的 “向前兼容”,指的是舊版本的 Go 編譯新的 Go 代碼。這個方向比較少被談論,甚至特意設計。

讓我有種,還能這樣搞的感覺?

Go1 向前兼容

Go 團隊的大當家 Russ Cox,針對如下幾個方面做了新設計和調整,輸出了《Proposal: Extended forwards compatibility in Go[1]》,已經得到討論,很大概率落地,把版本號停留在 Go1.x.y。

將會涉及的部分重點如下:

  1. 新增 GOTOOLCHAIN 環境變量的設置。
  2. 改變在工作模塊(work module)中解釋 go 行的方式,增加了新的工具鏈(toolchain)行以此實現聲明。此對應的是 go.mod 文件的 go 行和toolchain 行。
  3. 對 go get 等命令進行聯動修改,允許對 GOTOOLCHAIN 和工作模塊的 go 版本進行修改。

增強工作模塊的 go.mod 和 toolchain

聲明 Go 版本號

我們會在 go module 生成時,在 Go 工程下生成一個 go.mod 文件。其中會包含一個 go 行,將會聲明該模塊應該應用的 go 版本語義是什么版本。

如下圖,聲明的是 go1.13:

圖片

go.mod 文件中的 go 版本聲明

在該提案落地后,本地安裝的 Go 工具鏈如果比 go 行所聲明的 go 版本新時,它將會直接提供所要求的舊語義,而不會重新下載和調用一個舊版本的 Go 工具鏈。

但如果 go 行聲明了一個較新的 Go 工具鏈,那么本地安裝的 Go 工具鏈就會下載并運行較新的工具鏈來滿足其需求。

以下是一個例子。

在例子中,我們正在運行的版本是 go1.30。但在模塊中,有一個 go.mod 聲明了 go 版本:

go 1.30.1

Go1.30 會下載并調用 go1.30.1 來完成命令,因為模塊中要求的 go 版本比本地安裝的更高。

但如果 go.mod 文件中聲明的是:

go 1.20rc1

Go1.30 將自己提供 go1.20rc1 語義,而不是運行 go1.20 rc1 工具鏈。因為本地安裝的版本更新,可以通過 GODEBUG 來滿足舊語義的訴求。

聲明 Go 工具鏈版本號

可能會有同學想要運行更新版本的 Go 工具鏈,但 Go 語義上還是使用舊版本。

為了滿足這點訴求,go.mod 文件也會支持 toolchain 行的設置,以此來支持新版本的工具鏈的使用。

如果 go.mod 文件中設置了 toolchain 行,將指定使用的工具鏈版本,go 行只指定語言語義的 Go 版本。

go.mod 文件如下:

go 1.18
toolchain go1.20rc1

作用是將為這個模塊選擇 go1.18 的語義,使用 go1.20rc1 的工具鏈來構建應用。

增強 Go 工具鏈 GOTOOLCHAIN

將會在 Go 工具鏈新增 GOTOOLCHAIN 環境變量的設置和使用可以使用 go env -w 設置。也可以在 go test 時做如下調整:

GOTOOLCHAIN=go1.17.2 go test

go build 編譯時可以:

GOTOOLCHAIN=go1.18rc1 go build -o myprog.exe

可能會有同學疑惑 GOTOOLCHAIN 的默認值哪來,有哪些值?

  • 設置GOTOOLCHAIN=local:使用本地安裝的 Go 工具鏈,不會下載不同版本的工具鏈。這是現在的的默認行為。
  • 設置GOTOOLCHAIN=auto:使用工作模塊的 go.mod 中聲明的 go 版本(當它比本地安裝的 Go 工具鏈要新時)。

GOTOOLCHAIN 環境變量的默認值取決于 Go 工具鏈。標準 Go 發行版默認為 GOTOOLCHAIN=auto,也就是將控制權交給 go.mod 文件。這是在實施這個提案后 99% 會看到的默認行為。

Go 工具鏈的一攬子東西里也比較多,例如:go get 命令,也會對 go.mod 文件中的 go 版本或 toolchain 行進行變更,以配合使用。

總結

在今天這篇文章中,我們介紹了 Go1 兼容性增強中的 “向前兼容” 部分,其中要點是:加大對 go.mod 文件中的 go 行和 toolchain 行和工具鏈 GOTOOLCHAIN 相關的應用。

核心目的是為了將 go 語法語義和 go 工具鏈的版本聲明公開出來,達到隔離使用。再配合 “向后兼容” 中的 GODEBUG 的使用,讓 Go 語言做兼容性時有更多更大的使用空間來實現機制上的保障。

這么一來,Go 語言在這一塊會變得異常復雜,理解成本也會變高。希望大家后續在這塊也不要再踩坑了。

責任編輯:武曉燕 來源: 腦子進煎魚了
相關推薦

2023-01-27 19:11:40

GoGo1兼容性

2022-12-14 09:13:37

Go程序規范

2022-12-09 08:52:51

Go匿名接口

2021-02-21 09:09:24

GoGOPATH代碼

2020-11-16 13:38:31

PostMessage

2021-07-28 06:10:47

拖拽設計器 transmat

2021-09-05 07:55:37

前端Emoji 表情

2023-08-29 08:55:45

Go1Go核心

2025-03-06 08:54:24

泛型類型MapGo1

2024-08-02 08:38:20

Controller接口地址

2024-05-10 08:47:22

標準庫v2Go

2025-01-14 11:01:38

2010-08-19 09:59:03

Office 2011兼容性

2025-06-04 04:00:55

Go裸機環境

2023-04-17 19:43:54

兼容性測試軟件測試

2009-03-07 09:49:07

Windows 7兼容性

2024-12-03 09:45:34

2018-12-12 11:30:54

JavaString字符串

2021-04-09 08:23:30

Css前端加載動畫

2024-01-30 09:21:29

CSS文字效果文字裝飾
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品毛片一区二区在线看 | 亚洲综合大片69999 | 超碰在线国产 | 亚洲一区成人 | 国产精品日韩欧美一区二区 | 老司机精品福利视频 | 国产一区91在线 | 欧美一区二区三区视频在线播放 | 欧美一级一 | 播放一级黄色片 | 亚洲国产精品视频 | 天天弄| 国内精品一区二区 | 玖玖在线免费视频 | 日韩中文在线视频 | 日本精品一区二区三区在线观看视频 | 国产精品99久久久久 | 亚欧洲精品在线视频免费观看 | 国产一区在线免费观看 | 色婷婷激情 | 国产成都精品91一区二区三 | 国产黄色网址在线观看 | 黄色在线免费看 | 亚洲免费人成在线视频观看 | 男人的天堂久久 | 日韩精品a在线观看图片 | 久久99精品久久久久久国产越南 | 99久久国产免费 | 黑人性hd| 久久99视频这里只有精品 | 超碰91在线 | 国产亚洲精品久久午夜玫瑰园 | 亚洲国产一区二区视频 | 在线视频91| 激情网五月天 | 成人国内精品久久久久一区 | 欧美视频第二页 | 国产精品高清一区二区三区 | 日韩欧美国产电影 | 久久久久久美女 | 日韩欧美国产一区二区 |