1. 程式人生 > >golang 對 package import 一探究竟

golang 對 package import 一探究竟

剛開始學golang,它的模組不像node裡的那麼直觀,直接在一個地方exports 另一個地方 require 就行,弄的我半天都沒弄懂機制

接下來把我的經驗分享下:

例如我們已有檔案的目錄結構為,package分為add和main:

addNum.go的程式碼:

package add

func Add(a, b int) int {
	return a + b
}

func mult(a, b int) int {
	return a * b
}

test01.go程式碼:

package main

func main() {
}

我們要在test01.go中呼叫add.go中的Add方法,其實很簡單:

package main

import (
	"fmt"

	"../add" // 使用相對路徑找到add這個包也就是資料夾
)

func main() {
	sum := add.Add(1, 2) // 呼叫的時候直接包名.方法名就行
	fmt.Print(sum)
}

注意:

1.檔名可以和該包名不一致,但檔案中使用的包名必須要和該包名一致。

例:就像我這裡的檔名是addNum.go但是宣告包的時候為:package add 要和上層包名也就是資料夾名一致

2.如果函式名的首字母大寫,表示該函式是公有的,可以被其他程式呼叫,如果首字母小寫,該函式就是是私有的

例:我在main函式中如果這樣呼叫:add.mult(1,2) 就會報錯 //error cannot refer to unexported name add.mult

最後介紹下幾種常用的import方法:

import(
"fmt"
)
//然後我們程式碼裡面可以通過如下的方式呼叫
//fmt.Println("hello world")

import(
. "fmt"
)
//這個點操作的含義就是這個包匯入之後在你呼叫這個包的函式時,你可以省略字首的包名,也就是前面你調
//用的fmt.Println("hello world")可以省略的寫成Println("hello world")

import(
f "fmt"
)
別名操作的話呼叫包函式時字首變成了我們的字首,即f.Println("hello world")

import (
"database/sql"
_ "github.com/ziutek/mymysql/godrv"
)
//_操作其實是引入該包,而不直接使用包裡面的函式,而是呼叫了該包裡面的init函式。

感謝您的閱讀!如果文章中有任何錯誤,或者您有更好的理解和建議,歡迎和我聯絡!