GO語言中的方法值和方法表示式的使用方法詳解

2022-09-24 11:06:12 字數 1929 閱讀 5752

go語言也稱 golang,兼具效率、效能、安全、健壯等特性。

手冊上關於這塊的解釋感覺不是很詳細清晰,經過幾個示例自己總結了下這塊的用法。

方法表示式:說簡單點,其實就是方法物件賦值給變數。

這裡有兩種使用方式:

1)方法值:隱式呼叫, struct例項獲取方法物件

2)  方法表示式:顯示呼叫, struct型別獲取方法物件, 需要傳遞struct例項物件作為引數。

舉個例子:

package main

import (

"fmt"

)type student struct

func (s *student) skillpointer()

func (s student) skillvalue()

func main() // 結構體例項化

//常規使用方式

s.skillpointer()

fmt.println(".............................\n")

//方法表示式

sfunc1 := (*student).skillpointer //注意這裡直接使用 指標型結構體名稱.方法

sfunc1(&s) //顯示的把接收者*student傳遞過去

sfunc2 := student.skillvalue //注意這裡直接使用 結構體名稱.方法

sfunc2(s) //顯示的把接收者student傳遞過去

fmt.println(".............................\n")

//方法值

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

sfunc3() // 是不是 有點像程式設計客棧匿名函式呼叫,宣告了變數sfunc3 為結構體的方法名,然後變數()呼叫。有點多此一舉的感覺毛?

sfunc4 := s.skillvalue //因為沒有呼叫指標方法,這裡完成內容拷貝的操作,區別在**,稍後會舉例看到

sfunc4()

fmt.println(".............................\n")

}輸出:指標型函式:0xc00007c程式設計客棧060, &

..............程式設計客棧...............

指標型函式:0xc00007c060, &

值型別函式: 0xc00007c0e0,

.............................

指標型函式:0xc00007c060, &程式設計客棧amp;

值型別函式: 0xc00007c1

.............................

剛才說的方法值得方式是拷貝,有啥區別,接下來我們看看:

package main

import (

"fmt"

)type student struct

func (s *student) skillpointer()

func (s student) skillvalue()

func main()

mvalue := u.skillvalue // 因為不是指標型別,不受下面修改的影響。

u.id, u.name = 2, "鳩摩智"

u.skillvalue()

mvalue() // 值未變,不受影響

}輸出:值型別函式: 0xc0000044c0,

值型別函式: 0xc000004520,

如果要全部更新,換成 mvalue := u.skillpointer  指標型函式即可。

無論從事什麼行業,只要做好兩件事就夠了,乙個是你的專業、乙個是你的人品,專業決定了你的存在,人品決定了你的人脈,剩下的就是堅持,用善良專業和真誠贏取更多的信任。

總結

Go語言中的正規表示式

語法 說明表示式例項 一般字元 匹配自身 abc 匹配abc 匹配任意除換行符 n 外的字元 a.b 轉義字元 a b 匹配a.b 字符集 字元類 對應的位置可以是字符集中任意字元,也可以給出範圍,如 abc 或 a c 第乙個字元為 則表示匹配除括號外其他的字元,所有特殊字元再字符集中都失去原有的...

golang 方法值與方法表示式

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.setinfopointe...

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

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