1. 程式人生 > 其它 >對 Golang 簡潔架構實戰的理解,以及 Golang 開源專案包定義的解惑

對 Golang 簡潔架構實戰的理解,以及 Golang 開源專案包定義的解惑

前言

我們在檢視 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

公眾號_Golang簡潔架構實戰
部落格_Golang簡潔架構實戰