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類型的屬性歸根到底還是屬性,不是方法,這個還是有根本區別的。

 


免責聲明!

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



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