對 Golang 簡潔架構實戰的理解,以及 Golang 開源專案包定義的解惑
阿新 • • 發佈:2022-01-06
前言
我們在檢視 Golang 程式碼的時候往往跳轉到一個 interface{}
就終止了,這個時候你看不到程式碼的實現,其實這就是面向介面設計的一種巧妙之處,其實這裡是為了讓組合代替面向物件的複雜巢狀,或者說簡化父子類形成的物件樹。intreface{}
和 struct
的組合,interface{}
中定義方法名,入參,返回值,struct
中定義對應的類的變數,從而解耦方法與變數的繫結關係。
實操
我們來看我寫的一個簡單例子:
對於 interface{}
用法的一個講解:
一個 interface{}
型別的資料作為返回值得時候是可以返回包內的 struct
的,這個 struct
interface{}
中的方法。
當你在 main()
或其他函式中呼叫 New*()
方法的時候 interface{}
被返回到對應變數中。隨後呼叫 interface{}
中的方法,我們執行跳轉定義,就會調到 interface{}
定義的檔案中。
package main import ( spwlt "dcos-webshell/studypkgs/wlt" spxm "dcos-webshell/studypkgs/xiaoming" "fmt" ) func main() { tmp := spxm.NewXM("wang") fmt.Println("your name => ") tmp.Speak("9527") fmt.Println(tmp.Say("sober")) wlt := spwlt.NewWlt() wlt.Say("sober.wang") wlt.Speak("wangshen") }
這個時候你需要像下面這樣定義你的包
└── studypkgs
├── stady_pkgs.go // 這裡定義介面
├── wlt
│ └── wlt.go // 這裡實現介面的不同方式
└── xiaoming
└── xiaoming.go
社群中的例子
一個非常棒的值得學習的專案:
https://github.com/abronan/valkeyrie