Go語言的方法值和方法表示式
摘要:
// code_20_struct_method_expression project main.go
package main
import (
"fmt"
)
//方法表示式:也即“方法物件賦值給變數”
//兩種使用方式:
//1)隱式呼叫, struct例項獲...
// code_20_struct_method_expression project main.go package main import ( "fmt" ) //方法表示式:也即“方法物件賦值給變數” //兩種使用方式: //1)隱式呼叫, struct例項獲取方法物件---->方法值 //2)顯示呼叫, struct型別獲取方法物件, 須要傳遞struct例項物件作為引數。---->方法表示式 type Person struct { name string sexbyte ageint } func (p *Person) PrintInfoPointer() { fmt.Printf("%p, %v\n", p, p) } func (p Person) PrintInfoValue() { fmt.Printf("%p, %v\n", &p, p) } func main() { //直接呼叫 p := Person{"ck_god", 'm', 18} p.PrintInfoPointer() fmt.Println("---------------\n") //方法表示式 pFunc1 := (*Person).PrintInfoPointer pFunc1(&p) pFunc2 := Person.PrintInfoValue pFunc2(p) fmt.Println("---------------\n") //方法值 pFunc3 := p.PrintInfoPointer pFunc3() pFunc4 := p.PrintInfoValue pFunc4() fmt.Println("---------------\n") //備註:pFunc2和pFunc4的記憶體地址是不一樣的;pFunc1和pFunc3的記憶體地址是一致的 }
結果如下:
0xc000050400, &{ck_god 109 18} --------------- 0xc000050400, &{ck_god 109 18} 0xc000050480, {ck_god 109 18} --------------- 0xc000050400, &{ck_god 109 18} 0xc0000504e0, {ck_god 109 18} ---------------