今天看了個源碼,發現一個寫法
在python里面是可以在類定義之外額外負值新的方法的,Go語言中,定義結構體struct的時候好像只能定義屬性,方法要通過方法名前傳入struct引用的方式來將方法和結構體綁在一起,從而實現類似於Java,python中類的形式。
但是能不能在定義結構體的時候就定義好方法呢,在這個源碼里就看到了可行的實現方式,即通過匿名函數(其實就是定義func類型的屬性,好理解)
比如有下面的代碼,
package main
type Class struct {
method func(string, int, Class) (string, int)
signalString string
}
func (c *Class) Func() {
print(c.signalString+" 執行了;\n")
}
func main() {
class := Class{func(s string, i int, class Class) (string, int) {
return s+class.signalString+"-yes\n", i+100
}, "super"};
signS, signI := class.method("got?", 12, class)
class.Func()
print(signS)
print(signI)
}
執行后:
super 執行了; got?super-yes 112
說白了都一樣,可執行的屬性也就是方法,go里面又沒有this,只有struct參數,不同的地方在於定義方法可以不傳調用者,使用func屬性需要傳入調用者,func類型的屬性歸根到底還是屬性,不是方法,這個還是有根本區別的。
