網頁

2021/5/1

Golang go.sum 用途

如果Go程式有使用go命令下載module,例如go mod tidy命令,則可在程式根目錄看到go.sum檔,其用途如下。

簡單說go.sum是Go用來驗證下載的module是否為真,內容是否有被竄改過的module校驗雜湊碼檔。


當Go下載module或go.mod檔時,會計算其雜湊(hash)並與主程式的go.sum中紀錄的雜湊碼做比較,如果比較結果不同Go會發出警告並將下載的module刪除。

如果go.sum檔不存在則Go會從公開的校驗碼資料庫(checksum database)取得該module的雜湊進行比對,並在通過驗證後將其新增到go.sum並下載module。

go.sum是一份紀錄下載的module及依賴module的雜湊碼的文字檔。每一行代表一個module的雜湊,包含三個部分:

[module path] [module version] [module hash]

  • module path:雜湊所屬的module路徑。
  • module version:雜售所屬的module版本。若是/go.mod結尾則為module的go.mod的雜湊。
  • module hash:包含了雜湊演算法名稱(e.g. h1)和base64編碼的雜湊碼,兩者以冒號:分隔。目前僅支援SHA-256(h1)雜湊演算法。如果未來有新的演算法則會名為h2

例如下面是使用go mod tidy下載rsc.io/quote package時產生的go.sum檔的內容。

golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c h1:qgOY6WgZOaTkIIMiVjBQcw93ERBE4m30iBm00nkL0i8=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
rsc.io/quote v1.5.2 h1:w5fcysjrx7yqtD/aO+QwRjYZOKnaM9Uh2b40tElTs3Y=
rsc.io/quote v1.5.2/go.mod h1:LzX7hefJvL54yjefDEDHNONDjII0t9xZLPXsUe+TKr0=
rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=


沒有留言:

張貼留言