今天看了个源码,发现一个写法
在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+" 执行了; ") } func main() { class := Class{func(s string, i int, class Class) (string, int) { return s+class.signalString+"-yes ", 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类型的属性归根到底还是属性,不是方法,这个还是有根本区别的。