Go使用變量類型聲明和方法的注意事項

當咱們經過把一個現有(非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

相關文章
相關標籤/搜索