使用go module匯入本地包的方法教程詳解

2021-10-03 19:47:32 字數 3252 閱讀 8963

go module 是go1.11版本之後官方推出的版本管理工具,並且從 go1.13 版本開始, go module 將是go語言預設的依賴管理工具。到今天 go1.14 版本推出之後 go modules 功能已經被正式推薦在生產環境下使用了。

這幾天已經有很多教程講解如何使用 go module ,以及如何使用 go module 匯入gitlab私有倉庫,我這裡就不再囉嗦了。但是最近我發現很多小夥伴在群裡問如何使用 go module 匯入本地包,作為初學者大家剛開始接觸package的時候肯定都是先在本地建立乙個包,然後本地呼叫一下,然後就被卡住了。。。

這裡就詳細介紹下如何使用 go module 匯入本地包。

前提

假設我們現在有 moduledemo 和 mypackage 兩個包,其中 moduledemo 包中會匯入 mypackage 包並使用它的 new 方法。

mypackage/mypackage.go 內容如下:

package mypackage

import "fmt"

func new()

我們現在分兩種情況討論:

注意:在乙個專案(project)下我們是可以定義多個包(package)的。

目錄結構

現在的情況是,我們在 moduledemo/main.go 中呼叫了 mypackage 這個包。

moduledemo

├── go.mod

├── main.go

└── mypackage

└── mypackage.go

匯入包

這個時候,我們需要在 moduledemo/go.mod 中按如下定義:

module moduledemo

go 1.14

然後在 moduledemo/main.go 中按如下方式匯入 mypackage

package main

import (

"fmt"

"moduledemo/mypackage" // 匯入同一專案下的mypackage包

)func main()

舉個例子

舉一反三,假設我們現在有檔案目錄結構如下:

└── bubble

├── dao

│   └── mysql.go

├── go.mod

└── main.go

其中 bubble/go.mod 內容如下:

go 1.14bubble/dao/mysql.go 內容如下:

package dao

import "fmt"

func new()

bubble/main.go 內容如下:

)func main()目錄結構

├── moduledemo

│   ├── go.mod

│   └── main.go

└── mypackage

├── go.mod

└── mypackage.go

匯入包

這個時候, mypackage 也需要進行module初始化,即擁有乙個屬於自己的 go.mod 檔案,內容如下:

module mypackage

go 1.14

然後我們在 moduledemo/main.go 中按如下方式匯入:

import (

"fmt"

"mypackage"

)func main()

因為這兩個包不在同乙個專案路徑下,你想要匯入本地包,並且這些包也沒有發布到遠端的github或其他**倉庫位址。這個時候我們就需要在 go.mod 檔案中使用 replace 指令。

在呼叫方也就是 packagedemo/go.mod 中按如下方式指定使用相對路徑來尋找 mypackage 這個包。

module moduledemo

go 1.14

require "mypackage" v0.0.0

replace "mypackage" => "../mypackage"

舉個例子

最後我們再舉個例子鞏固下上面的內容。

我們現在有檔案目錄結構如下:

├── p1

│   ├── go.mod

│   └── main.go

└── p2

├── go.mod

└── p2.go

p1/main.go 中想要匯入 p2.go 中定義的函式。

p2/go.mod 內容如下:

go 1.14p1/main.go 中按如下方式匯入

)func main()因為我並沒有把 liwenzhou.com/q1mi/p2 這個包上傳到 liwenzhou.com 這個**,我們只是想匯入本地的包,這個時候就需要用到 replace 這個指令了。

p1/go.mod 內容如下:

replace "liwenzhou.com/q1mi/p2" => "../p2"此時,我們就可以正常編譯 p1 這個專案了。

說再多也沒用,自己動手試試吧。

總結

您可能感興趣的文章:

4 使用Go module匯入本地包

假設我們現在有moduledemo和mypackage兩個包,其中moduledemo包中會匯入mypackage包並使用它的new方法。mypackage mypackage.go內容如下 package mypackage import fmt func new 現在分兩種情況討論 1 同乙個專...

go module呼叫本地包

1 目錄結構 demo p1 p11 p11.go main.go go.mod p2 p2.go go.mod2 p2.go原始碼 package p2 import fmt const name bob new 首字母大寫,供外部呼叫 func new 3 p11.go原始碼 package p...

Go Module 引入本地自定義包

go module 版本規則 go modules 是乙個版本化依賴管理系統,版本需要遵循一些規則,開啟乙個 go.mod 檔案,你會發現類似下面的依賴規則 依賴規則由兩個部分組成,前面一部分是包路徑,後面一部分表示的是版本號。你會發現有兩種版本號,一種是我們很熟悉的 git 標籤,比如 v0.0....