成人免费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

2024-01-30 09:21:29

CSS文字效果文字裝飾

2018-12-12 11:30:54

JavaString字符串

2021-04-09 08:23:30

Css前端加載動畫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久国产精品免费免费狐狸 | 婷婷丁香在线视频 | 91久色| 日韩av一区二区在线 | av片在线播放 | 91影视| 欧美色影院 | 成年网站在线观看 | 亚洲成人精品一区 | 午夜99| 久久久久久久久久毛片 | 亚洲成人av| 97精品超碰一区二区三区 | 国产视频久久久 | 国产91久久精品一区二区 | 麻豆久久久9性大片 | 国家一级黄色片 | 日韩成人精品一区二区三区 | 久久久久久久亚洲精品 | 欧美不卡一区二区三区 | 美女国内精品自产拍在线播放 | 一级毛片视频在线观看 | 美国a级毛片免费视频 | 久久一区二区三区四区 | 福利精品在线观看 | 91亚洲国产 | 亚洲欧美精品国产一级在线 | 中文字幕1区 | 羞羞网站免费观看 | 色爱综合网 | 国产永久免费 | 亚洲vs天堂 | 欧美高清hd | 亚洲欧美在线视频 | 亚洲视频不卡 | 99国产精品久久久久久久 | 手机av在线 | 99久久婷婷国产综合精品 | 精品日韩一区 | 成人午夜影院 | 欧美亚洲国产日韩 |