golang 方法值與方法表示式

2021-10-07 03:14:14 字數 1479 閱讀 6076

package main

import

"fmt"

type person struct

func

(p person)

setinfovalue()

func

(p *person)

setinfopointer()

func

main()

fmt.

printf

("main: %p, %v\n"

,&p, p)

p.setinfopointer()

//傳統呼叫方式

//儲存方式入口位址

pfunc := p.setinfopointer //這個就是方法值,呼叫函式時,無需再傳遞接收者,隱藏了接收者

pfunc()

//等價於 p.setinfopointer()

vfunc := p.setinfovalue

vfunc()

//等價於 p.setinfovalue()

}

執行結果:

main:

0xc00005a400

,setinfopointer:

0xc00005a400,&

setinfopointer:

0xc00005a400,&

setinfovalue:

0xc00005a4a0

,

package main

import

"fmt"

type person struct

func

(p person)

setinfovalue()

func

(p *person)

setinfopointer()

func

main()

fmt.

printf

("main: %p, %v\n"

,&p, p)

//方法值 f := p.setinfopointer //隱藏了接收者

//方法表示式

f :=

(*person)

.setinfopointer

f(&p)

//顯式把接收者傳遞過去 ====》 p.setinfopointer()

f2 :=

(person)

.setinfovalue

f2(p)//顯式把接收者傳遞過去 ====》 p.setinfovalue()

}

執行結果:

main:

0xc00005a400

,setinfopointer:

0xc00005a400,&

setinfovalue:

0xc00005a480

,

匿名方法與Lambda表示式

匿名方法的概念 這個方法沒有具體的名稱,而只有委託關鍵字 方法引數 方法體,所以稱為匿名方法,匿名方法允許將 塊通過委託變數作為引數傳遞,以代替單獨定義的方法。首先宣告乙個委託 public delegate int calculatordelegate int a,int b 然後使用匿名方法 c...

匿名方法與lambda表示式

匿名方法,從字面上理解即是沒有名字的的方法。用delegate關鍵字進行宣告且只能賦值給乙個委託 for example1 static void main string args ps 經常用作 從c 3.0後又開始使用lambda表示式來代替匿名函式,只要在有委託引數型別的地方就可以使用lamb...

方法宣告 方法變數和方法表示式

方法宣告 方法宣告和普通函式宣告類似,只是在函式名字前多了乙個引數。這個引數把這個方法繫結到引數對應的型別上。type point struct func p point distance q point float64方法變數 函式只需要提供實參而不需要提供接受者就能夠呼叫。p point q p...