溫馨提示×

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

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

method在golang中的作用是什么

發(fā)布時(shí)間:2021-01-06 15:10:16 來(lái)源:億速云 閱讀:140 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)method在golang中的作用是什么,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

什么是method(方法)?method是函數(shù)的另外一種形態(tài),隸屬于某個(gè)類型的方法。

method的語(yǔ)法:

func (r Receiver) funcName (parameters) (result)

receiver可以看作是method的第一個(gè)參數(shù),method并且支持繼承和重寫(xiě)。

  • Go中雖沒(méi)有class,但依舊有method

  • 通過(guò)顯示說(shuō)明receiver來(lái)實(shí)現(xiàn)與某個(gè)類型的結(jié)合

  • 只能為同一個(gè)包中的類型定義方法

  • receiver可以是類型的值或者指針

  • 不存在方法重載

  • 可以使用值或指針來(lái)調(diào)用方法,編譯器會(huì)自動(dòng)完成轉(zhuǎn)換

  • 從某種意義上來(lái)說(shuō),方法是函數(shù)的語(yǔ)法糖,因?yàn)閞eceiver其實(shí)就是方法所接收的第一個(gè)參數(shù)(Method Value vs. Method Expression)

  • 如果外部結(jié)構(gòu)和嵌入結(jié)構(gòu)存在同名方法,則優(yōu)先調(diào)用外部結(jié)構(gòu)的方法

  • 類型別名不會(huì)擁有底層類型所附帶的方法

  • 方法可以調(diào)用結(jié)構(gòu)中的非公開(kāi)字段

go version go1.12

/**
 * 什么是method(方法)?method是函數(shù)的另外一種形態(tài),隸屬于某個(gè)類型的方法。
 * method的語(yǔ)法:func (r Receiver) funcName (parameters) (result)。
 * receiver可以看作是method的第一個(gè)參數(shù),method并且支持繼承和重寫(xiě)。
 */
package main

import (
  "fmt"
)

type Human struct {
  name string
  age int
}

// 字段繼承
type Student struct {
  Human // 匿名字段
  school string
}
type Employee struct {
  Human  // 匿名字段
  company string
}

// 函數(shù)的另外一種形態(tài):method,語(yǔ)法:func (r Receiver) funcName (parameters) (result)
// method當(dāng)作struct的字段使用
// receiver可以看作是method的第一個(gè)參數(shù)
// 指針作為receiver(接收者)和普通類型作為receiver(接收者)的區(qū)別是指針會(huì)對(duì)實(shí)例對(duì)象的內(nèi)容發(fā)生操作,
// 普通類型只是對(duì)副本進(jìn)行操作
// method也可以繼承,下面是一個(gè)匿名字段實(shí)現(xiàn)的method,包含這個(gè)匿名字段的struct也能調(diào)用這個(gè)method
func (h *Human) Info() {
  // method里面可以訪問(wèn)receiver(接收者)的字段
  fmt.Printf("I am %s, %d years old\n", h.name, h.age)
}

// method重寫(xiě),重寫(xiě)匿名字段的method
// 雖然method的名字一樣,但是receiver(接收者)不一樣,那么method就不一樣
func (s *Student) Info() {
  fmt.Printf("I am %s, %d years old, I am a student at %s\n", s.name, s.age, s.school)
}
func (e *Employee) Info() {
  fmt.Printf("I am %s, %d years old, I am a employee at %s\n", e.name, e.age, e.company)
}
func main() {
  s1 := Student{Human{"Jack", 20}, "tsinghua"}
  e1 := Employee{Human{"Lucy", 26}, "Google"}
  // 調(diào)用method通過(guò).訪問(wèn),就像struct訪問(wèn)字段一樣
  s1.Info()
  e1.Info()
}

關(guān)于method在golang中的作用是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

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

AI