當咱們經過把一個現有(非interface)的類型定義爲一個新的類型時,新的類型不會繼承現有類型的方法。spa
神馬意思?來一段簡短錯誤的代碼:code
package main import "sync" type myMutex sync.Mutex func main() { var mtx myMutex mtx.Lock() mtx.Unlock() }
輸出:blog
# command-line-arguments .\mtx.Lock undefined (type myMutex has no field or method Lock) .\ mtx.Unlock undefined (type myMutex has no field or method Unlock)
初步看代碼貌似沒啥問題。實際報錯「myMutex類型沒有字段或方法鎖」?怎麼解決?
若是咱們確實須要原有類型的方法,能夠定義一個新的struct類型,用匿名方式把原有類型嵌入進來便可:繼承
package main import "sync" type myLocker struct { sync.Mutex } func main() { var mtx myLocker mtx.Lock() mtx.Unlock() }
換成interface類型的聲明也會保留它們的方法集合:class
package main import "sync" type myLocker sync.Locker func main() { var mtx myLocker = new(sync.Mutex) mtx .Lock() mtx .Unlock() }
類型聲明和方法你們注意下便可。import