3 分鐘帶你掌握 go mod 導入本地包

對於一個項目來說,不可能所有代碼都自己寫。

所以這就涉及到引入別人的代碼,得有效避免重複造輪子,在 Go 語言裏面,這個操作也叫引包。

Go 語言誕生之後,升級了很多次一直都沒有官方的包管理工具。

一直到 1.11 版纔出現 go module 這個官方的管理工具。

於是現在的大部分 Go 語言新項目都在使用 go module 來進行包管理。

我們用得非常多的是使用 go module 引入 Github 上的包,直接 go get 就搞定了。

但是如何引入本地的包呢?

一、引入的包在同一項目下


在實際開發中,這是我們最見的場景。

一般情況下我們在項目的目錄下面,會建很多的包,他們並不衝突,比如下面結構圖中的:instancekun-package

.
├── main.go
├── go.mod
├── instance
│   └── UserInstance.go
└── kun-package
    └── Hello.go

如果你想在 main.go 裏面想要使用kun-package 包裏面的代碼,你只需要初始化 go module 即可,他會自動生成類似以下內容的 go.mod 文件:

module design

go 1.17

這是兩個關鍵信息:

第一行是我們的這個總包的名字。

你可以理解爲,我們新建的 go 項目其實也就是一個大包。

然後你會發現我在引入本地的包時,前面的包名就是這個名字:

package main

import (
 kunPackage "design/kun-package"
 "fmt"
)

func main() {
 fmt.Println("hello world")
 kunPackage.SayHello()
}

看到 kun-package 前面的 design 了麼?

舉一反三,如果你修改了 go.mod 裏面的第一行爲 github.com/golangstackdev 那你項目裏 main.go 文件裏面的引入也就得變成 github.com/golangstackdev/kun-package

go.mod 裏面第二行是設定我們當前環境的 go 版本,也就是最小版本支持。

二、不在同一項目下面

其實難免我們要引用的包,是別人項目下面的,而不是自己項目下面的。

我們先來看一個項目結構圖:

project01
├── go.mod
└── main.go
project02
└── kun-package
    ├── go.mod
    └── hello.go

我們的工程01(project01)下面新建了一個 main.go ;

同時在工程01所在目錄,我們還有一個工程02(project02)。

工程01裏面需要使用的工程02裏面的包。

這個時候,要想完成引用的話:被引用的包和使用的工程都要有各自獨立的 go.mod 文件。

project02/kun-package/go.mod 內容非常簡單,就是基礎的兩行:

module kun-package

go 1.17

project01/go.mod 裏面就比較複雜了,需要做兩步操作:

module project01

go 1.17

require kun-package v0.0.0

replace kun-package => ../project02/kun-package

require 是聲明我們引入的包名和版本。

replace 是進行替換對於的包指向路徑。

非常容易理解!

然後我們在project01/main.go 文件裏面就可以正常的使用了:

package main

import (
 kunPackage "kun-package"
)

func main() {
 kunPackage.SayHello()
}

你學廢了麼?

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/-L57E9HEFdoAluk6jFCU-g