Go 语言的func 匿名函数,func类型的属性

Posted 华腾海神

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go 语言的func 匿名函数,func类型的属性相关的知识,希望对你有一定的参考价值。

今天看了个源码,发现一个写法

在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类型的属性归根到底还是属性,不是方法,这个还是有根本区别的。

 

以上是关于Go 语言的func 匿名函数,func类型的属性的主要内容,如果未能解决你的问题,请参考以下文章

go语言的匿名函数

GO 之匿名函数闭包

go语言学习笔记 — 函数:匿名函数 —— 没有函数名的函数

go语言学习--go中闭包

go语言学习之闭包函数

Golang之匿名函数和闭包