一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Golang - 使用go module導入本地包的方法教程詳解

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

2020-06-06 12:19Golang教程網 Golang

go module 將是Go語言默認的依賴管理工具。到今天 Go1.14 版本推出之后 Go modules 功能已經被正式推薦在生產環境下使用了。本文重點給大家介紹如何使用 go module 導入本地包,感興趣的朋友一起看看吧

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 內容如下:

?
1
2
3
4
5
package mypackage
import "fmt"
func New(){
 fmt.Println("mypackage.New")
}

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

在同一個項目下

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

目錄結構

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

?
1
2
3
4
5
moduledemo
├── go.mod
├── main.go
└── mypackage
  └── mypackage.go

導入包

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

module moduledemo

go 1.14

然后在 moduledemo/main.go 中按如下方式導入 mypackage

?
1
2
3
4
5
6
7
8
9
package main
import (
 "fmt"
 "moduledemo/mypackage" // 導入同一項目下的mypackage包
)
func main() {
 mypackage.New()
 fmt.Println("main")
}

舉個例子

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

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

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

?
1
2
3
module github.com/q1mi/bubble
 
go 1.14

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

?
1
2
3
4
5
package dao
import "fmt"
func New(){
 fmt.Println("mypackage.New")
}

bubble/main.go 內容如下:

?
1
2
3
4
5
6
7
8
9
10
package main
 
import (
 "fmt"
 "github.com/q1mi/bubble/dao"
)
func main() {
 dao.New()
 fmt.Println("main")
}

不在同一個項目下

目錄結構

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

導入包

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

module mypackage

go 1.14

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

?
1
2
3
4
5
6
7
8
import (
 "fmt"
 "mypackage"
)
func main() {
 mypackage.New()
 fmt.Println("main")
}

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

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

?
1
2
3
4
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 內容如下:

module liwenzhou.com/q1mi/p2

go 1.14

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

?
1
2
3
4
5
6
7
8
import (
 "fmt"
 "liwenzhou.com/q1mi/p2"
)
func main() {
 p2.New()
 fmt.Println("main")
}

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

p1/go.mod 內容如下:

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

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

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

總結

到此這篇關于使用go module導入本地包的方法教程詳解的文章就介紹到這了,更多相關go module 導入本地包內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.liwenzhou.com/posts/Go/import_local_package_in_go_module/

延伸 · 閱讀

精彩推薦
  • Golanggo日志系統logrus顯示文件和行號的操作

    go日志系統logrus顯示文件和行號的操作

    這篇文章主要介紹了go日志系統logrus顯示文件和行號的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
  • Golanggolang的httpserver優雅重啟方法詳解

    golang的httpserver優雅重啟方法詳解

    這篇文章主要給大家介紹了關于golang的httpserver優雅重啟的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    helight2992020-05-14
  • Golanggolang json.Marshal 特殊html字符被轉義的解決方法

    golang json.Marshal 特殊html字符被轉義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉義的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
  • GolangGolang通脈之數據類型詳情

    Golang通脈之數據類型詳情

    這篇文章主要介紹了Golang通脈之數據類型,在編程語言中標識符就是定義的具有某種意義的詞,比如變量名、常量名、函數名等等,Go語言中標識符允許由...

    4272021-11-24
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
  • GolangGolang中Bit數組的實現方式

    Golang中Bit數組的實現方式

    這篇文章主要介紹了Golang中Bit數組的實現方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    天易獨尊11682021-06-09
  • Golanggolang如何使用struct的tag屬性的詳細介紹

    golang如何使用struct的tag屬性的詳細介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細介紹,從例子說起,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看...

    Go語言中文網11352020-05-21
主站蜘蛛池模板: 男人含玉势出嫁束器 | 性派对xxxhd| 久久精品动漫99精品动漫 | 亚洲欧美乱 | 亚洲高清国产拍精品动图 | 国产农村一级特黄α真人毛片 | 国内精品久久久久影院男同志 | 日韩毛片免费在线观看 | 秋葵丝瓜茄子草莓榴莲樱桃 | 九9热这里只有真品 | 欧美亚洲国产另类 | 久久青草费线频观看国产 | 99热这里只有精品在线 | 蜜月aⅴ免费一区二区三区 蜜桃影像传媒推广 | 免费看隐私男生网站 | 男人天堂资源 | 国产卡一卡二卡3卡乱码免费 | 3d动漫美女被吸乳羞羞视频 | 2021国产精品视频 | 久久99re热在线播放7 | 精品国产福利片在线观看 | 福利片免费一区二区三区 | 好看的亚洲视频 | 亚洲精品国产专区91在线 | 国产综合亚洲欧美日韩一区二区 | 调教车文 | 免费看成年视频网页 | 亚洲天堂免费看 | 日韩二三区| 精品日韩欧美一区二区三区 | 色综合久久天天综合 | 日本精品人妖shemale人妖 | 深夜免费在线观看 | 日本sss| 久久视频这里只精品99热在线观看 | 国产ab | 亚洲成人伦理 | 青草久久精品亚洲综合专区 | 日本中文字幕不卡在线一区二区 | 日本九九热 | 亚洲天堂男人 |