溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Go語言中方法的案例分析

發(fā)布時間:2020-08-28 14:19:25 來源:億速云 閱讀:155 作者:小新 欄目:編程語言

小編給大家分享一下Go語言中方法的案例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

                                                       

go 方法

定義

方法是具有特殊接收器參數(shù)的函數(shù),即在 func 和方法名之間方法接收者。

func (s Student) GetName() string  {
    return s.name}func (s *Student) SetName(name string) {
    s.name = name}

我們可以把接收者類型為指針的成員方法叫做指針方法,把接收者類型為非指針的成員方法叫做值方法。

在你需要修改對象的時候,才必須用指針(引用傳遞),否則將所屬類型聲明為字面量即可(值傳遞)。另外避免在每個方法調(diào)用上復(fù)制該值。

type Integer intfunc (a *Integer) Increase(i Integer) {
    *a = *a + i}func main() {
    var a Integer = 2
    var b Integer = 2
    //a.Increase(b)
    //(&a).Increase(b)
    (*Integer).Increase(&a, b)
    fmt.Println(a)}

該方法并不屬于 Integer 類,而是屬于指向 Integer 的指針類型,我們在調(diào)用方法時,之所以可以直接在 a 實例上調(diào)用 Increase 方法,是因為 Go 語言編譯階段會自動將 a 轉(zhuǎn)化為對應(yīng)的指針類型 &a,所以真正調(diào)用的代碼是 (&a).Increase(b)

其實是語法糖

type A struct {
  name string}func (a A) Name() string {
  a.name = "Hi! " + a.name  return a.name}func main() {
  a := A{name: "test"}

  fmt.Println(a.Name())

  fmt.Println(A.Name(a))}

a.Name() 其實就是 A.Name(a) 的語法糖,變量 a 就是所謂的方法接收者。

func NameOfA(a A) string {
  a.name = "Hi! " + a.name  return a.name}func main() {
  t1 := reflect.TypeOf(A.Name)
  t2 := reflect.TypeOf(NameOfA)

  fmt.Println(t1 == t2)// true}

go 語言中函數(shù)類型只和參數(shù)與返回值相關(guān),所以這兩個類型相等就能證明 方法本質(zhì)上就是普通的函數(shù),而接收者就是隱含的第一個參數(shù)。

以上是Go語言中方法的案例分析的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI