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

Go 1.11 相比 Go 1.10 有哪些值得注意的改動?

開發(fā) 前端
Go 1.11 的 Go Modules 為 Go 生態(tài)帶來了現(xiàn)代化的依賴管理解決方案,雖然在當(dāng)時是初步引入,但它奠定了未來 Go 項目開發(fā)的基礎(chǔ),極大地改善了版本控制和構(gòu)建復(fù)現(xiàn)性。

https://go.dev/doc/go1.11

Go 1.11 值得關(guān)注的改動:

  1. WebAssembly 支持 : Go 1.11 實驗性地增加了對 WebAssembly (js/wasm) 的支持,允許將 Go 程序編譯成可在瀏覽器中運行的 .wasm 文件。編譯產(chǎn)物包含 Go 運行時,因此體積較大(約 2MB,壓縮后 500KB),并提供了實驗性的 syscall/js 包與 JavaScript 進行交互。同時,新增了 GOOS="js" 和 GOARCH="wasm",命名符合 *_js.go 或 *_wasm.go 規(guī)則的文件現(xiàn)在僅在對應(yīng)編譯目標下生效。
  2. Go 模塊 (Go Modules) : Go 1.11 初步引入了 Go 模塊 (Go Modules) 作為 GOPATH 的替代方案,提供了內(nèi)置的版本控制和包分發(fā)支持。雖然仍處于實驗階段,但其目標是讓開發(fā)者不再局限于 GOPATH 工作區(qū),并改善依賴管理和構(gòu)建的可復(fù)現(xiàn)性。
  3. 編譯器優(yōu)化 : 編譯器現(xiàn)在會報告在類型斷言 switch 語句的 guard 中聲明但未被使用的變量為錯誤,例如 switch x := v.(type) {} 中的 x 若未使用,編譯將失敗。這增強了代碼的嚴謹性,與 gccgo 和 go/types 的行為保持了一致。

下面是一些值得展開的討論:

Go 模塊 (Go Modules) 詳解

Go 1.11 版本引入了對 Go 模塊 (Go Modules) 的初步支持,這是 Go 語言在包管理和版本依賴方面的一個重大變革,旨在解決長期以來 GOPATH 模式帶來的諸多問題。Modules 提供了一種新的方式來管理項目依賴,集成了版本控制和包分發(fā)功能,使得開發(fā)者可以:

  • 在 GOPATH 之外創(chuàng)建和管理項目。
  • 通過 go.mod 文件明確、輕量地記錄項目的版本依賴信息。
  • 實現(xiàn)更可靠、更可復(fù)現(xiàn)的構(gòu)建過程。

盡管在 Go 1.11 中 Modules 仍處于實驗階段,其細節(jié)可能會在后續(xù)版本中調(diào)整,但官方保證使用 Go 1.11 遷移到 Modules 的項目將在 Go 1.12 及以后版本中繼續(xù)工作。

Go 1.10 (及更早) 的 GOPATH 模式

在 Go 1.11 之前,Go 項目的開發(fā)和依賴管理主要依賴 GOPATH 環(huán)境變量。

  • 工作區(qū)限制 :所有的 Go 源代碼(包括你自己的項目和第三方依賴)都必須放在 $GOPATH/src 目錄下,形成了固定的目錄結(jié)構(gòu),例如 $GOPATH/src/github.com/user/project。
  • 依賴獲取 :使用 go get 命令下載依賴包,默認會下載最新的代碼到 $GOPATH/src 對應(yīng)路徑下。
  • 版本管理缺失 :GOPATH 本身沒有內(nèi)置的版本控制機制。開發(fā)者通常需要借助第三方工具(如 dep, glide 等)或者手動將依賴復(fù)制到項目下的 vendor 目錄來進行版本鎖定,但這并非語言內(nèi)置功能,且容易導(dǎo)致不一致。
  • 可復(fù)現(xiàn)性問題 :由于 go get 默認拉取最新代碼,不同時間、不同環(huán)境下構(gòu)建同一個項目可能會因為依賴版本的變化而產(chǎn)生不同的結(jié)果或構(gòu)建失敗。

Go 1.11 的 Go Modules 模式

Go Modules 的引入改變了這一切:

  • 項目位置自由 :項目可以放在文件系統(tǒng)中的任何位置,不再受 GOPATH 限制。
  • go.mod 文件 :每個模塊 (module) 的根目錄下都有一個 go.mod 文件。該文件定義了模塊路徑(module path)、項目所需的最低 Go 版本以及所有直接依賴項及其要求的最低版本(通過 require 指令)。
  • go.sum 文件 :伴隨 go.mod 生成的 go.sum 文件包含了模塊所依賴的包(包括直接和間接依賴)的具體版本及其內(nèi)容的哈希校驗和,用于保證依賴包的完整性和構(gòu)建的可復(fù)現(xiàn)性。
  • 自動依賴管理 :當(dāng)你在代碼中 import 一個新的包,或者使用 go build, go test, go list 等命令時,Go 工具鏈會自動分析 go.mod 文件,下載缺失的依賴項到 $GOPATH/pkg/mod 目錄下(這是一個全局共享的緩存),并可能更新 go.mod 和 go.sum 文件。

示例對比

假設(shè)我們要創(chuàng)建一個簡單的項目,依賴 rsc.io/quote 包。

Go 1.10 (GOPATH 模式)

  • 確保你的項目在 $GOPATH/src 下,比如 $GOPATH/src/myproject。
  • 創(chuàng)建 main.go:
package main

import (
    "fmt"
    "rsc.io/quote"
)

func main() {
    fmt.Println(quote.Hello())
}
  • 獲取依賴:
go get rsc.io/quote

這會將 rsc.io/quote 的最新代碼下載到 $GOPATH/src/rsc.io/quote。沒有版本信息被記錄在你的項目里。

  • 構(gòu)建:
go build

Go 1.11 (Go Modules 模式)

  • 在任何你喜歡的位置創(chuàng)建項目目錄,比如 /path/to/myproject (無需在 GOPATH 內(nèi))。
  • 進入目錄并初始化模塊:
cd /path/to/myproject
go mod init myproject

這會創(chuàng)建一個 go.mod 文件,內(nèi)容類似:

module myproject

go 1.11
  • 創(chuàng)建 main.go (內(nèi)容同上)。
  • 構(gòu)建或運行:
go build
# 或者 go run .

Go 工具會自動檢測到 import "rsc.io/quote",查找該包的最新版本,下載它,并更新 go.mod 和 go.sum。

go.mod 文件可能變?yōu)椋?/p>

module myproject

go 1.11

require rsc.io/quote v1.5.2 // 版本號可能不同

go.sum 文件也會被創(chuàng)建,包含類似以下的校驗和信息:

golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c h1:qgOY6WgZO...
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:Nq...
rsc.io/quote v1.5.2 h1:w5fc...
rsc.io/quote v1.5.2/go.mod h1:Lz...
rsc.io/sampler v1.3.0 h1:7u...
rsc.io/sampler v1.3.0/go.mod h1:T1...

現(xiàn)在,項目的依賴及其精確版本都被清晰地記錄下來了。

GO111MODULE 環(huán)境變量

Go 1.11 使用 GO111MODULE 環(huán)境變量來控制模塊支持的開啟狀態(tài):

  • GO111MODULE=on: 強制使用模塊支持,忽略 GOPATH。
  • GO111MODULE=off: 強制禁用模塊支持,回歸 GOPATH 模式。
  • GO111MODULE=auto (默認值): 當(dāng)項目在 $GOPATH/src 之外,并且根目錄或任何父目錄包含 go.mod 文件時,啟用模塊支持。否則,使用 GOPATH 模式。

其他相關(guān)變更

  • 導(dǎo)入路徑限制 : 由于 @ 符號在模塊相關(guān)的命令(如 go get example.com/pkg@v1.2.3)中有特殊含義,Go 1.11 開始禁止在 import 路徑中使用 @ 符號。
  • 包加載 API : 新增了 golang.org/x/tools/go/packages 包,提供了一個更強大的 API 來定位和加載 Go 源代碼包,它能更好地支持模塊,并可以與 Bazel、Buck 等其他構(gòu)建系統(tǒng)集成。這個包旨在未來替代標準庫中的 go/build 包。
  • 構(gòu)建緩存強制化 : Go 1.10 引入了構(gòu)建緩存 (GOCACHE)。Go 1.11 宣布這將是最后一個允許通過設(shè)置 GOCACHE=off 來禁用緩存的版本。從 Go 1.12 開始,構(gòu)建緩存將是強制性的,這是逐步淘汰 $GOPATH/pkg 的一步。模塊和新的包加載機制已經(jīng)依賴于啟用構(gòu)建緩存。

總而言之,Go 1.11 的 Go Modules 為 Go 生態(tài)帶來了現(xiàn)代化的依賴管理解決方案,雖然在當(dāng)時是初步引入,但它奠定了未來 Go 項目開發(fā)的基礎(chǔ),極大地改善了版本控制和構(gòu)建復(fù)現(xiàn)性。

責(zé)任編輯:武曉燕 來源: Piper蛋窩
相關(guān)推薦

2025-04-22 08:02:23

2025-04-21 00:05:00

2025-04-17 08:00:48

2025-05-06 00:00:08

2025-04-18 08:07:12

2025-04-28 08:00:56

2025-04-14 08:06:04

2025-04-25 08:01:12

Go應(yīng)用程序部署

2025-04-15 08:00:53

2025-04-29 08:03:18

2025-05-06 08:00:35

2025-05-06 05:00:00

2025-04-23 08:02:40

2025-04-24 09:01:46

2025-04-27 08:00:35

2025-04-27 00:00:01

Go 1.16Go 1.15接口

2025-04-21 00:00:00

Go 開發(fā)Go 語言Go 1.9

2025-04-14 00:00:04

2025-04-30 09:02:46

2025-04-11 08:02:38

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲人成网站777色婷婷 | 亚洲一区二区中文字幕 | 久久久av | 麻豆va| 国产精品久久久久久久久久久久 | 国产精品免费在线 | 久久久久久黄 | 久久久久久久久久毛片 | 亚洲精品一区二区三区在线 | 三级黄视频在线观看 | 久久久天天 | 女人av | 99国产视频 | 岛国毛片 | 国产日韩精品在线 | 国产精品视频在线播放 | 污片在线观看 | 亚洲精品久久区二区三区蜜桃臀 | 国产午夜av片 | 中文字幕国产精品 | 亚洲国产高清高潮精品美女 | 国产精品99久久久久久久久 | 欧美极品视频在线观看 | 亚洲天堂中文字幕 | 国产免费va | 精品国产乱码久久久久久丨区2区 | julia中文字幕久久一区二区 | 中文字幕在线一区二区三区 | 一二区视频 | 国产视频一区在线 | 日韩高清在线 | 国产小u女发育末成年 | 亚洲日本成人 | 成人黄色电影在线观看 | 一区二区在线 | 欧美99 | 成人依人 | 午夜寂寞影院在线观看 | 久久国产美女视频 | 国产999精品久久久久久 | 色综合久久88色综合天天 |