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


當我們通過把一個現有(非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()
}

類型聲明和方法大家注意下即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM