日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

go方法的深入探究(7.21增补)

發布時間:2023/12/4 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go方法的深入探究(7.21增补) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

1)哪些類型可以有方法:
????????1)只能對命名類型和命名類型的指針編寫方法;
????????2)不能對接口類型和接口類型的指針編寫方法;
????????3)只能在定義命名類型的那個包編寫其方法。

2)receiver是值的方法,編譯器會隱式的生成一個receiver是對應類型指針的同名方法。反過來卻不會。

3)結構體的匿名字段的類型限制:
????????1)不可以是未命名類型;
????????2)可以是命名類型或命令類型的指針類型;
????????3)接口類型可以,接口類型的指針類型不行;

4)結構體匿名字段的方法向外傳遞的規則:
????????1)匿名字段為值類型時:值的方法會傳遞給結構體的值,指針的方法會傳遞給結構體的指針;
????????2)匿名字段為指針類型時:指針的方法會傳遞給值和指針;
????????3)匿名字段為接口類型時:方法會傳遞給值和指針;

5)匿名字段的方法,是被經過包裝實現為外圍結構體的方法。

6)使用具體的類型去調用方法時。
????????首先,編譯器查看該類型下有沒有該方法;
????????其次,擴展查看該類型的指針類型或者基類型(如果該類型是指針類型);
????????最后,如果以上查找都未找到,則會報錯。
????? ? 注:擴展查看不會查看隱式實現的方法(匿名字段傳遞出來的方法、值=>指針隱式實現的方法)

7)具體類型的方法集是以該類型為receiver的方法的集合。

8)接口類型的方法集就是其定義里聲明的方法,接口調用方法時類似C++調用虛函數;接口的指針沒有方法集。

9)類型存入接口時只檢查方法集;調用接口的方法時也只檢查方法集;reflect包同樣只查看方法集。

因此:

類型A的方法,A和*A都可以調用;
類型A的方法,雖然隱式實現了類型*A的方法,**A卻不能調用;
類型*A的方法,A、*A、**A都可以調用;
不能實現**A的方法;
type A ... func (a A)X(){} func (a *A)Y(){} type IX interface{X() } type IY interface{Y() }a := A{} b := &a c := &ba.X() // ok b.X() // ok c.X() // errora.Y() // ok b.Y() // ok c.Y() // okvar ix IX ix = a // ok ix = b // ok ix = c // errorvar iy IY iy = a // error iy = b // ok iy = c // errorvar jx IX jx = ix // ok jx = &ix // error

對于代碼:

type I interface {IE() }type A intfunc (_ A) VA() {} func (_ *A) PA() {}type B struct {I } func (_ B) VB() {} func (_ *B) PB() {}type C struct {A } func (_ C) VC() {} func (_ *C) PC() {}type D struct {*A } func (_ D) VD() {} func (_ *D) PD() {}



下面的列表說明了其方法集和方法的來源:

type(類型) explicit(顯式定義的方法)
?implicit(隱式實現的方法)
?inherit(繼承自匿名字段的方法)
I IE


*I


A VA


*A PA VA

B VB
IE
*B PB VB IE
C VC
VA
*C PC VC PA,VA
D VD
PA,VA
*D PD VD PA,VA

轉載于:https://my.oschina.net/liudiwu/blog/292698

總結

以上是生活随笔為你收集整理的go方法的深入探究(7.21增补)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。