Golang 基礎值速學之二十(go mod)

huxiaobai_001發表於2020-07-23

一、Golang 中包的介紹和定義

包(package)是多個 Go 原始碼的集合,是一種高階的程式碼複用方案,Go 語言為我們提供了
很多內建包,如 fmt、strconv、strings、sort、errors、time、encoding/json、os、io 等。
Golang 中的包可以分為三種:1、系統內建包 2、自定義包 3、第三方包
系統內建包: Golang 語言給我們提供的內建包,引入後可以直接使用,如 fmt、
strconv、strings、sort、errors、time、encoding/json、os、io 等。
自定義包:開發者自己寫的包
第三方包:屬於自定義包的一種,需要下載安裝到本地後才可以使用,如前面給大家介紹的
“github.com/shopspring/decimal”包解決 float 精度丟失問題。

二、Golang 包管理工具 go mod

在 Golang1.11 版本之前如果我們要自定義包的話必須把專案放在 GOPATH 目錄。Go1.11 版
本之後無需手動配置環境變數,使用 go mod 管理專案,也不需要非得把專案放到 GOPATH
指定目錄下,你可以在你磁碟的任何位置新建一個專案 , Go1.13 以後可以徹底不要 GOPATH

1、go mod init 初始化專案

實際專案開發中我們首先要在我們專案目錄中用 go mod 命令生成一個 go.mod 檔案管理我
們專案的依賴。
比如我們的 golang 專案檔案要放在了 itying 這個資料夾,這個時候我們需要在 itying 資料夾
裡面使用 go mod 命令生成一個 go.mod檔案

Golang 基礎值速學之二十(go mod)

三、Golang 中 init()初始化函式

init()函式介紹
在 Go 語言程式執行時匯入包語句會自動觸發包內部 init()函式的呼叫。需要注意的是:init()
函式沒有引數也沒有返回值。 init()函式在程式執行時自動被呼叫執行,不能在程式碼中主動呼叫它。
包初始化執行的順序如下圖所示:

Golang 基礎值速學之二十(go mod)
init()函式執行順
Go 語言包會從 main 包開始檢查其匯入的所有包,每個包中又可能匯入了其他的包。Go 編
譯器由此構建出一個樹狀的包引用關係,再根據引用順序決定編譯順序,依次編譯這些包的程式碼。
在執行時,被最後匯入的包會最先初始化並呼叫其 init()函式, 如下圖示:

Golang 基礎值速學之二十(go mod)

四、go mod

比如我們要在專案當中使用github上的decimal包 如何使用呢?
因為我們已經 go mod init 建立了go.mod檔案
然後只需要執行 go get github.com/shopspring/decimal 就完事了 但是畢竟是國外的 你不科學上網可能下載會失敗
可以藉助goland工具

Golang 基礎值速學之二十(go mod)

這裡這麼寫就完事了 不要問為什麼 總之能讓你下載到國外的東東
然後重啟goland 在命令列重新執行 go get github.com/shopspring/decimal 就會下載下來了
然後你再去看go.mod檔案裡面:

Golang 基礎值速學之二十(go mod)
就已經自動給你整合進來了!很類似php當中的composer.json是吧 就是一個包的管理工具

本作品採用《CC 協議》,轉載必須註明作者和本文連結

胡軍

相關文章