總結:
1.
結構體ServiceFactory定義好之後 我們一方面可以在結構體內部定義屬性 第二方面我們可以將結構體理解為類檔案,然後下邊的func (sf ServiceFactory) Create(name string) IService {} 可以理解為結構體也就是“類”裡面的方法
func(sf ServiceFactory) 這裡面的ServiceFactory如果不要求是指標型別 也就是說不是ServiceFactory的時候 那麼我們在外邊就可以直接services.ServiceFactory{}.Create(“one”)來呼叫 表示services包裡面的ServiceFactory類下邊的Create()方法
如果func(sf *ServiceFactory) *ServiceFactory表示要求傳入的是指標型別 那麼我們在外邊呼叫的時候就需要傳入指標型別了比如:
(&services.ServiceFactory{}).Create(“one”)
或者
new(services.ServiceFactory).Create(“one”)
要記住
new()是初始化 有了記憶體地址 但是記憶體塊當中還是空的
*name 表示型別 指標型別 指標指向記憶體的地址 要求是name指標型別那麼就要傳遞指標進去那麼就要new()
&name 表示獲取記憶體地址也就是指標,因為指標指向記憶體地址 所以*name要求傳遞指標的時候要麼new()要麼&name傳記憶體地址type ServiceFactory struct { } func (sf ServiceFactory) Create(name string) IService { switch name { case "one": return &IServiceOne{} case "two": return &IServiceTwo{} default: return nil } }
2.
services包裡面的所有檔案裡面的函式,結構體都可以通過services.xxx獲取到!但是結構體裡面的方法是無法直接獲取到的,得通過結構體來獲取
比如:services.ServiceFactory{}.Create(“one”)
本作品採用《CC 協議》,轉載必須註明作者和本文連結