佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 使用go module導(dǎo)入本地包的方法教程詳解

使用go module導(dǎo)入本地包的方法教程詳解

熱門標(biāo)簽:地方門戶網(wǎng)站 Linux服務(wù)器 百度競價排名 呼叫中心市場需求 鐵路電話系統(tǒng) AI電銷 網(wǎng)站排名優(yōu)化 服務(wù)外包

go module 是Go1.11版本之后官方推出的版本管理工具,并且從 Go1.13 版本開始, go module 將是Go語言默認(rèn)的依賴管理工具。到今天 Go1.14 版本推出之后 Go modules 功能已經(jīng)被正式推薦在生產(chǎn)環(huán)境下使用了。

這幾天已經(jīng)有很多教程講解如何使用 go module ,以及如何使用 go module 導(dǎo)入gitlab私有倉庫,我這里就不再啰嗦了。但是最近我發(fā)現(xiàn)很多小伙伴在群里問如何使用 go module 導(dǎo)入本地包,作為初學(xué)者大家剛開始接觸package的時候肯定都是先在本地創(chuàng)建一個包,然后本地調(diào)用一下,然后就被卡住了。。。

這里就詳細(xì)介紹下如何使用 go module 導(dǎo)入本地包。

前提

假設(shè)我們現(xiàn)在有 moduledemo 和 mypackage 兩個包,其中 moduledemo 包中會導(dǎo)入 mypackage 包并使用它的 New 方法。

mypackage/mypackage.go 內(nèi)容如下:

package mypackage
import "fmt"
func New(){
 fmt.Println("mypackage.New")
}

我們現(xiàn)在分兩種情況討論:

在同一個項目下

注意:在一個項目(project)下我們是可以定義多個包(package)的。

目錄結(jié)構(gòu)

現(xiàn)在的情況是,我們在 moduledemo/main.go 中調(diào)用了 mypackage 這個包。

moduledemo
├── go.mod
├── main.go
└── mypackage
  └── mypackage.go

導(dǎo)入包

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

module moduledemo

go 1.14

然后在 moduledemo/main.go 中按如下方式導(dǎo)入 mypackage

package main
import (
 "fmt"
 "moduledemo/mypackage" // 導(dǎo)入同一項目下的mypackage包
)
func main() {
 mypackage.New()
 fmt.Println("main")
}

舉個例子

舉一反三,假設(shè)我們現(xiàn)在有文件目錄結(jié)構(gòu)如下:

└── bubble
    ├── dao
    │   └── mysql.go
    ├── go.mod
    └── main.go

其中 bubble/go.mod 內(nèi)容如下:

module github.com/q1mi/bubble

go 1.14

bubble/dao/mysql.go 內(nèi)容如下:

package dao
import "fmt"
func New(){
 fmt.Println("mypackage.New")
}

bubble/main.go 內(nèi)容如下:

package main

import (
 "fmt"
 "github.com/q1mi/bubble/dao"
)
func main() {
 dao.New()
 fmt.Println("main")
}

不在同一個項目下

目錄結(jié)構(gòu)

├── moduledemo
│   ├── go.mod
│   └── main.go
└── mypackage
    ├── go.mod
    └── mypackage.go

導(dǎo)入包

這個時候, mypackage 也需要進(jìn)行module初始化,即擁有一個屬于自己的 go.mod 文件,內(nèi)容如下:

module mypackage

go 1.14

然后我們在 moduledemo/main.go 中按如下方式導(dǎo)入:

import (
 "fmt"
 "mypackage"
)
func main() {
 mypackage.New()
 fmt.Println("main")
}

因為這兩個包不在同一個項目路徑下,你想要導(dǎo)入本地包,并且這些包也沒有發(fā)布到遠(yuǎn)程的github或其他代碼倉庫地址。這個時候我們就需要在 go.mod 文件中使用 replace 指令。

在調(diào)用方也就是 packagedemo/go.mod 中按如下方式指定使用相對路徑來尋找 mypackage 這個包。

module moduledemo
go 1.14
require "mypackage" v0.0.0
replace "mypackage" => "../mypackage"

舉個例子

最后我們再舉個例子鞏固下上面的內(nèi)容。

我們現(xiàn)在有文件目錄結(jié)構(gòu)如下:

├── p1
│   ├── go.mod
│   └── main.go
└── p2
    ├── go.mod
    └── p2.go

p1/main.go 中想要導(dǎo)入 p2.go 中定義的函數(shù)。

p2/go.mod 內(nèi)容如下:

module liwenzhou.com/q1mi/p2

go 1.14

p1/main.go 中按如下方式導(dǎo)入

import (
 "fmt"
 "liwenzhou.com/q1mi/p2"
)
func main() {
 p2.New()
 fmt.Println("main")
}

因為我并沒有把 liwenzhou.com/q1mi/p2 這個包上傳到 liwenzhou.com 這個網(wǎng)站,我們只是想導(dǎo)入本地的包,這個時候就需要用到 replace 這個指令了。

p1/go.mod 內(nèi)容如下:

module github.com/q1mi/p1
go 1.14
require "liwenzhou.com/q1mi/p2" v0.0.0
replace "liwenzhou.com/q1mi/p2" => "../p2"

此時,我們就可以正常編譯 p1 這個項目了。

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

總結(jié)

到此這篇關(guān)于使用go module導(dǎo)入本地包的方法教程詳解的文章就介紹到這了,更多相關(guān)go module 導(dǎo)入本地包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 詳解Go module的介紹及使用
  • go module使用本地包的方法示例
  • Django重裝mysql后啟動報錯:No module named ‘MySQLdb’的解決方法
  • 使用Go module和GoLand初始化一個Go項目的方法

標(biāo)簽:黃山 衡水 蘭州 湖南 仙桃 銅川 湘潭 崇左

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《使用go module導(dǎo)入本地包的方法教程詳解》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    蓝山县| 长岛县| 顺昌县| 周至县| 尉犁县| 开平市| 长治县| 旅游| 屏山县| 射阳县| 金塔县| 连江县| 江孜县| 万全县| 庐江县| 时尚| 赣榆县| 宿州市| 永靖县| 昌吉市| 辽宁省| 新沂市| 玛纳斯县| 邮箱| 哈密市| 峨眉山市| 荣昌县| 罗平县| 洱源县| 株洲市| 北票市| 车险| 镇安县| 望江县| 保山市| 乌拉特前旗| 洮南市| 滕州市| 青阳县| 阿拉善右旗| 江陵县|