當我們通過把一個現有(非interface)的類型定義為一個新的類型時,新的類型不會繼承現有類型的方法。
神馬意思?來一段簡短錯誤的代碼:
package main import "sync" type myMutex sync.Mutex func main() { var mtx myMutex mtx.Lock() mtx.Unlock() }
輸出:
# 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類型的聲明也會保留它們的方法集合:
package main import "sync" type myLocker sync.Locker func main() { var mtx myLocker = new(sync.Mutex) mtx .Lock() mtx .Unlock() }
類型聲明和方法大家注意下即可。
