如果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=
沒有留言:
張貼留言