1.初探
剛開始接觸go時,以為import自定義包與Java工程類似,在非GOPATH的路徑中新建了一個go項目HelloGo,如下:

接下來,利用beego的bee工具新建了另一個項目helloapi,如下:

現在,想在helloapi項目中調用HelloGo項目的函數,通過import引入“HelloGo”,編輯器中一直提示無法引用,即使把HelloGo添加到左下角的GOPATH[helloapi]中,也沒有效果。
具體如下:

問題出在HelloGo項目的路徑上,因為其不在系統定義的GOPATH路徑下,查看下系統定義的GOPATH:
localhost:helloapi loongshawn$ echo $GOPATH
/Users/loongshawn/Documents/go/workspace
localhost:helloapi loongshawn$
因此,要想引入自定義的包,需要自定義包的路徑為GOPATH路徑中。
2.操作
在工程A中創建方法Say,如下代碼:
package routers
import (
"fmt"
)
func Say() {
fmt.Println("引用helloweb項目的Say方法")
}
在工程B中引入工程A,并調用A工程中的Say函數,同時啟動工程A,Console輸出結果如下:


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

B工程中重新引用A工程的print方法,但是引用不了。因此,在寫可調用方法時,方法名首字母需要大寫,這是需要注意的一點。

由于接觸Go不久,許多地方理解不一定到位,如有紕漏之處,請各位同學幫忙指出來,謝謝!
補充:GoLang 自定義包總結
大概總結一下 GoLang 自定義包,并不是需要發布的包,只是一次在代碼工作路徑下調用自定義包的一個嘗試。
今天踩坑就是,以為 import 的時候要填寫文件夾里面的 package 的名稱,比如之前我是這么寫的:
這樣無法通過編譯,這就是本文的由來了
首先,工作的目錄結構是這樣的:
.
├── main.go
└── pack
└── test.go
1 directory, 2 files
其中,各個文件代碼為:
// 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!"
}
在主目錄下通過 go run 或者 go build 的方法運行或編譯,都是可以通過的。
證明了以下幾點:
import 語句使用的是文件夾的名稱
上面的文件夾名字為 pack
文件夾名稱和 package 名稱不一定一樣
比如 pack 和 p
調用自定義包使用 package.函數名 的方式
p.xxx
自定義包的調用和文件名沒有關系。
test.go 和 p 沒有關系
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- Golang import本地包和導入問題相關詳解
- Golang import 導入包語法及一些特殊用法詳解
- 對Golang import 導入包語法詳解
- golang 之import和package的使用
- golang中import cycle not allowed解決的一種思路
- 詳解golang避免循環import問題(“import cycle not allowed”)