今天看了個源碼,發現一個寫法
在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類型的屬性歸根到底還是屬性,不是方法,這個還是有根本區別的。