做phper的可能很少了解到包的概念,因為php當中沒有包的概念,java裡面有
包:最直觀的作用就是協調和組織我們的程式碼,方便歸類和複用,提高程式碼的可維護性
另外大家也看到了標題當中雙引號引起了“實體類”,是因為golang裡面是不存在類的概念的!
我們先來看包的引用:
包最直觀的作用就是協調和組織我們的程式碼,方便歸類和複用,提高程式碼的可維護性
找到你的gopath目錄建立包目錄
E:\gopath\src\com.huxiaobai
一般包的目錄都是以專案的網址命名,我們也不知道為啥,就這麼弄吧,com.huxiaobai就是一個包也可以理解為一個專案吧!
我們知道golang語言一定是要有入庫檔案的,我們建立一個公共的包叫做appmain子包,在這個main子包當中你可以隨意定義一個檔名字隨意,只不過package main必須是這麼寫,並且該檔案當中必須要有 func main(){}
比如:
另外我們再去定義一個服務的包叫做sevices包吧,在這個包裡面建立NewsService.go和UserService.go檔案
UserService.go裡面的package services
NewsService.go裡面的package services
預設情況下建立好了檔案會自動的將package的名稱命名為上級包的名稱
當然也可以改 但是 如果要改的話 那麼services包裡面的所有的go檔案的package必須保持一致!
比如在
com.huxiaobai/services/NewsService.go的package abc
com.huxiaobai/services/UserService.go的package abc
也是可以的 但是必須在services子包裡面的所有檔案的package保持一致!
一般不建議修改 預設上級包的名稱即可!
a.同一個包內之間的相互呼叫
直接呼叫即可!前提是package包名稱一致!直接呼叫函式即可!
b.跨包之間的函式呼叫
要點在圖中都已經很清晰了:
a.跨包呼叫那麼被呼叫的函式首字母必須大寫 大寫之後 包內的相互呼叫也要大寫了哦
b.在main包當中輸入GetUser()的時候會自動給你載入services包路徑 com.huxiaobai/services表示的是包路徑
以上就是包的引入和包內函式呼叫以及跨包函式呼叫的要點!是不是很簡單?
現在我們在來看一下struct
golang裡面不像java或者php當中有class類的概念 一般可以使用struct來實現類似的感覺
直接上程式碼吧:
UserModel.go檔案內容:package models //struct型別 也是和string int array 等基本型別一致 但是struct是一種結構體 可以理解為定義“類” 但是gaolang當中是不存在類的概念的 type UserModel struct { //相當於在“類”裡面定義屬性 必須要首字母大寫 不然在外包當中無法呼叫到 Uid int Uname string } //定義struct結構體裡面的方法 可以理解為php當中類裡面的方法 //(u UserModel) 表示將UserModel這個struct結構體引入進來 方便我們在方法裡面透過u.Uname呼叫struct結構體裡面的“屬性” //ToString 首字母大寫 方便外包呼叫 //string 表示該方法返回結構型別是字串型別 func (u UserModel) ToString() string { return "使用者名稱稱是"+u.Uname }
入庫檔案呼叫如下:
package main import ( "com.huxiaobai/models" "fmt" ) //main函式是入口函式 不能有引數 也不能有返回值 func main(){ user:=new(models.UserModel) user.Uname="huxiaobai_001" fmt.Println(user.ToString()) }
本作品採用《CC 協議》,轉載必須註明作者和本文連結