golang import自定義包方式
1.初探
剛開(kāi)始接觸go時(shí),以為import自定義包與Java工程類(lèi)似,在非GOPATH的路徑中新建了一個(gè)go項(xiàng)目HelloGo,如下:

接下來(lái),利用beego的bee工具新建了另一個(gè)項(xiàng)目helloapi,如下:

現(xiàn)在,想在helloapi項(xiàng)目中調(diào)用HelloGo項(xiàng)目的函數(shù),通過(guò)import引入“HelloGo”,編輯器中一直提示無(wú)法引用,即使把HelloGo添加到左下角的GOPATH[helloapi]中,也沒(méi)有效果。
具體如下:

問(wèn)題出在HelloGo項(xiàng)目的路徑上,因?yàn)槠洳辉谙到y(tǒng)定義的GOPATH路徑下,查看下系統(tǒng)定義的GOPATH:
localhost:helloapi loongshawn$ echo $GOPATH /Users/loongshawn/Documents/go/workspace localhost:helloapi loongshawn$
因此,要想引入自定義的包,需要自定義包的路徑為GOPATH路徑中。
2.操作
在工程A中創(chuàng)建方法Say,如下代碼:
package routers
import (
"fmt"
)
func Say() {
fmt.Println("引用helloweb項(xiàng)目的Say方法")
}
在工程B中引入工程A,并調(diào)用A工程中的Say函數(shù),同時(shí)啟動(dòng)工程A,Console輸出結(jié)果如下:


輸出結(jié)果顯示,調(diào)用Say函數(shù)正常。不知大家注意到被調(diào)用函數(shù)Say的寫(xiě)法沒(méi)有,函數(shù)名首字母是大寫(xiě)的,如果把其換成小寫(xiě)行不行?
在A工程的router.go中新增了print函數(shù),試一下:
func print() {
fmt.Println("引用helloweb項(xiàng)目的print方法")
}

B工程中重新引用A工程的print方法,但是引用不了。因此,在寫(xiě)可調(diào)用方法時(shí),方法名首字母需要大寫(xiě),這是需要注意的一點(diǎn)。

由于接觸Go不久,許多地方理解不一定到位,如有紕漏之處,請(qǐng)各位同學(xué)幫忙指出來(lái),謝謝!
補(bǔ)充:GoLang 自定義包總結(jié)
大概總結(jié)一下 GoLang 自定義包,并不是需要發(fā)布的包,只是一次在代碼工作路徑下調(diào)用自定義包的一個(gè)嘗試。
今天踩坑就是,以為 import 的時(shí)候要填寫(xiě)文件夾里面的 package 的名稱(chēng),比如之前我是這么寫(xiě)的:
import "./pack/p"
這樣無(wú)法通過(guò)編譯,這就是本文的由來(lái)了
首先,工作的目錄結(jié)構(gòu)是這樣的:
.
├── main.go
└── pack
└── test.go
1 directory, 2 files
其中,各個(gè)文件代碼為:
// main.go
package main
import (
"fmt"
"./pack"
)
func main() {
s := p.Sayhello()
fmt.Println(s)
}
// pack/test.go
package p
func Sayhello() string {
return "Hello!"
}
在主目錄下通過(guò) go run 或者 go build 的方法運(yùn)行或編譯,都是可以通過(guò)的。
證明了以下幾點(diǎn):
import 語(yǔ)句使用的是文件夾的名稱(chēng)
上面的文件夾名字為 pack
文件夾名稱(chēng)和 package 名稱(chēng)不一定一樣
比如 pack 和 p
調(diào)用自定義包使用 package.函數(shù)名 的方式
p.xxx
自定義包的調(diào)用和文件名沒(méi)有關(guān)系。
test.go 和 p 沒(méi)有關(guān)系
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
一文搞懂Go語(yǔ)言中defer關(guān)鍵字的使用
defer是golang中用的比較多的一個(gè)關(guān)鍵字,也是go面試題里經(jīng)常出現(xiàn)的問(wèn)題。今天就來(lái)整理一下關(guān)于defer的學(xué)習(xí)使用,希望對(duì)需要的朋友有所幫助2022-09-09
Golang中基礎(chǔ)的命令行模塊urfave/cli的用法說(shuō)明
這篇文章主要介紹了Golang中基礎(chǔ)的命令行模塊urfave/cli的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
go使用snmp庫(kù)查詢(xún)mib數(shù)據(jù)案例代碼
go語(yǔ)言使用snmp庫(kù)中的 k-sone/snmpgo 實(shí)現(xiàn)相關(guān)mib查詢(xún),本文通過(guò)實(shí)例代碼給大家介紹了go使用snmp庫(kù)查詢(xún)mib數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧2023-10-10
golang語(yǔ)言編碼規(guī)范的實(shí)現(xiàn)
這篇文章主要介紹了golang語(yǔ)言編碼規(guī)范的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Go 1.23中Timer無(wú)buffer的實(shí)現(xiàn)方式詳解
在 Go 1.23 中,Timer 的實(shí)現(xiàn)通常是通過(guò) time 包提供的 time.Timer 類(lèi)型來(lái)實(shí)現(xiàn)的,本文主要介紹了Go 1.23中Timer無(wú)buffer的實(shí)現(xiàn)方式,需要的可以了解下2025-03-03

