最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

go 的依賴(lài)管理 go. mod 與go. sum

2023-07-25 10:42 作者:青陽(yáng)小棧  | 我要投稿


go 在做依賴(lài)管理時(shí)會(huì)創(chuàng)建兩個(gè)文件,go. mod 和 go. sum。

### go.mod:

go. mod 提供了依賴(lài)版本的全部信息,而 go.sum 更偏向提供給程序的依賴(lài)指引.

有些項(xiàng)目沒(méi)有 go. mod 這個(gè)文件,go 會(huì)嘗試生成一個(gè)可能的 go.mod, 并取它的 checksum。


```

go. mod 內(nèi)容大概如下:


module github.com/wgpsec/ENScan


go 1.18


require (

? ? github.com/adjust/rmq/v4 v4.0.5

? ? github.com/antchfx/htmlquery v1.2.5


)?


require (

? ? github.com/antchfx/xpath v1.2.1 // indirect

? ? github.com/cespare/xxhash/v2 v2.1.1 // indirect

)


```



### go. sum:

go.sum 是 Go 語(yǔ)言管理包管理 `go mod` 而使用的一種鎖文件,用于記錄 Go 項(xiàng)目中所有依賴(lài)包的路徑和哈希值。每一行記錄了一個(gè)依賴(lài)項(xiàng)的信息,包括依賴(lài)項(xiàng)的模塊路徑、版本、哈希值等等

![[Pasted image 20230724180203.png]]

Go. Sum 文件的作用在于記錄各個(gè)依賴(lài)項(xiàng)的版本和哈希值,用于驗(yàn)證項(xiàng)目的依賴(lài)關(guān)系是否發(fā)生變化。當(dāng)使用 go mod 安裝依賴(lài)包的時(shí)候,會(huì)根據(jù) go. Mod 文件中指定的版本號(hào)下載相應(yīng)的依賴(lài)包,并計(jì)算依賴(lài)包的哈希值,將這些信息記錄到 go. Sum 中,當(dāng)再次構(gòu)建項(xiàng)目的時(shí)候,go. Mod 會(huì)檢查 go. Sum 文件,確保依賴(lài)項(xiàng)的哈希值和之前記錄的值一樣,以此來(lái)保證項(xiàng)目的構(gòu)建過(guò)程是可重現(xiàn)的 go. Sum 文件的重要性在于保證 Go 項(xiàng)目的依賴(lài)關(guān)系的可靠性和安全性,避免因?yàn)橐蕾?lài)包版本不一樣導(dǎo)致的不可預(yù)期的問(wèn)題


go. Sum 的每一行都是一個(gè)條目:


```

<module> <version> <hash>

<module> <version>/go. Mod <hash>

```


其中 module 是依賴(lài)的路徑,version 是依賴(lài)的版本號(hào)。hash 是以 `h1:` 開(kāi)頭的字符串,表示生成 checksum 的算法是第一版的 hash 算法(sha256)。


go. sum 中的依賴(lài)管理是根據(jù)項(xiàng)目具體情況來(lái)生成的,根據(jù)項(xiàng)目?jī)?nèi)容不同而有差別:


一、項(xiàng)目是否打 tag?


如果項(xiàng)目沒(méi)有打 tag,會(huì)生成一個(gè)版本號(hào),格式如下:??

v0.0.0-commit日期-commitID


比如 `github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=`。


引用一個(gè)項(xiàng)目的特定分支,比如 develop branch,也會(huì)生成類(lèi)似的版本號(hào):??

v當(dāng)前版本+1-commit日期-commitID


比如 `github.com/DATA-DOG/go-sqlmock v1.3.4-0.20191205000432-012d92843b00 h1:Cnt/xQ9MO4BiAjZrVpl0BiqqtTJjXUkWhIqwuOCVtWo=`。


二、項(xiàng)目有沒(méi)有用 go module?


如果項(xiàng)目有用到 go module,那么就是正常地用 tag 來(lái)作為版本號(hào)。


比如 `github.com/DATA-DOG/go-sqlmock v1.3.3 h1:CWUqKXe0s8A2z6qCgkP4Kru7wC11YoAnoupUKFDnH08=`。


如果項(xiàng)目打了 tag,但是沒(méi)有用到 go module,為了跟用了 go module 的項(xiàng)目相區(qū)別,需要加個(gè) `+incompatible` 的標(biāo)志。


比如 `github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=`


三、項(xiàng)目用的 go module 版本是不是 v2+?


關(guān)于 go module v2+ 的特性,可以參考 Go 的官方文檔:https://blog.golang.org/v2-go...。簡(jiǎn)單而言,就是通過(guò)讓依賴(lài)路徑帶版本號(hào)后綴來(lái)區(qū)分同一個(gè)項(xiàng)目里不同版本的依賴(lài),類(lèi)似于 `gopkg.in/xxx.v2` 的效果。


對(duì)于使用了 v2+ go module 的項(xiàng)目,項(xiàng)目路徑會(huì)有個(gè)版本號(hào)的后綴。


比如 `github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM=`


go.sum 示例:

```

github.com/adjust/rmq/v4 v4.0.5 h1:VU3Xa9qbkIti7pTUiZE88qo3V4coMo3fmgO04l1aPro=


github.com/adjust/rmq/v4 v4.0.5/go.mod h1:XSfjmFqSVBVA/tptvMEt/8BW/uGM1w88ZvUIt+HIRok=


github.com/antchfx/htmlquery v1.2.5 h1:1lXnx46/1wtv1E/kzmH8vrfMuUKYgkdDBA9pIdMJnk4=


github.com/antchfx/htmlquery v1.2.5/go.mod h1:2MCVBzYVafPBmKbrmwB9F5xdd+IEgRY61ci2oOsOQVw=


github.com/antchfx/xpath v1.2.1 h1:qhp4EW6aCOVr5XIkT+l6LJ9ck/JsUH/yyauNgTQkBF8=


github.com/antchfx/xpath v1.2.1/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs=


github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=


github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=


github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=


github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=


github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=


github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=


github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=


github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=


github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=


github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=


github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=


github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=


github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=


github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=


github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=


github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8=


github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk=


github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=


github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=


github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU=


github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=


github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=


github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=


github.com/go-playground/validator/v10 v10.10.0 h1:I7mrTYv78z8k8VXa/qJlOlEXn/nBh+BF8dHX5nt/dr0=


github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos=


github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg=

```


go 依賴(lài)采用 go.sum 機(jī)制有兩個(gè)目的:

一是 go 提供了分布式環(huán)境下的包管理依賴(lài)內(nèi)容校驗(yàn)。

二是為了加強(qiáng)安全性,防止依賴(lài)包被篡改。


go 的依賴(lài)管理 go. mod 與go. sum的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
普洱| 馆陶县| 廉江市| 宜阳县| 锡林郭勒盟| 陵水| 昌江| 拜城县| 房产| 大安市| 靖宇县| 大姚县| 山阳县| 长沙市| 辰溪县| 平乡县| 武宁县| 武威市| 富源县| 屏东市| 治多县| 工布江达县| 呈贡县| 株洲市| 望江县| 东宁县| 苍梧县| 宿州市| 石门县| 辉南县| 宽甸| 自贡市| 温州市| 沙湾县| 准格尔旗| 珲春市| 德昌县| 中卫市| 冀州市| 马龙县| 大理市|