Go的方法集

2021-09-07 20:16:33 字數 1067 閱讀 3783

方法集定義了介面的接受規則。

package main

import "fmt"

type notifier inte***ce

type user struct func (u *user) notify() func main() sendnotificatioin(u) } func sendnotificatioin(n notifier)

這段**看起來是沒問題的,但是無法通過編譯的。

./main.go:20: cannot use u (type user) as type notifier in argument to sendnotificatioin:

user does not implement notifier (notify method has pointer receiver)

user型別的值沒有實現notify介面。

go語言裡定義的方法集的規則是:

從值的角度來看規則

values

methods receivers

t(t t)

*t(t t) and (t *t)

t型別的值的方法集只包含值接收者宣告的方法。而指向t型別的指標的方法集既包含值接收者宣告的方法,也包含指標接收者宣告的方法。

從接收者的角度來看規則

methods receivers

values

(t t)

t and *t

(t *t)

*t 使用指標接收者來實現乙個介面,那麼只有指向那個型別的指標才能夠實現對應的介面。如果使用值接收者來實現乙個介面,那麼那個型別的值和指標都能夠實現對應的介面。

例如:①:func (u *user) notify()

sendnotificatioin(&u)

②:func (u user) notify()

sendnotificatioin(u)

③:func (u user) notify()

sendnotificatioin(&u)

go reflect 取指標 Go的方法集詳解

女主宣言 go語言以其本身具有的高併發特性,在雲計算開發中,得到了廣泛的應用,也深受廣大開發者的歡迎。但是大家對go語言真的了解了麼?本文作者經過對go語言的多年實踐應用,現對go語言中的方法集進行了一次詳細的總結,並通過實驗進行了驗證,相信對於go語言愛好者有很大的幫助。下來就跟隨作者一起學習下吧...

GO語言對方法傳值和方法集的理解

go語言中的方法和函式的區別就是方法多了乙個傳值,例如 函式 func notify 方法 func u user notify 首先要明確兩個定義,乙個就是方法定義時選擇的接收者,也就是 u user 可以是值接收者,也可以是指標接收者 另乙個定義就是你在使用方法時傳入的值是指標還是值。在通常情況...

go 求陣列的並集 交集 差集

集合的分類 並集 以屬於a或屬於b的元素為元素的集合成為a與b的並 集 交集 以屬於a且屬於b的元素為元素的集合成為a與b的交 集 差集 以屬於a而不屬於b的元素為元素的集合成為a與b的差 集 package main import fmt 求並集 func union slice1,slice2 ...