主頁(yè) > 知識(shí)庫(kù) > 詳解golang中的method

詳解golang中的method

熱門(mén)標(biāo)簽:湛江crm外呼系統(tǒng)排名 宿遷便宜外呼系統(tǒng)代理商 不封卡外呼系統(tǒng) 地圖標(biāo)注免費(fèi)定制店 寧波語(yǔ)音外呼系統(tǒng)公司 鄭州智能語(yǔ)音電銷(xiāo)機(jī)器人價(jià)格 上海極信防封電銷(xiāo)卡價(jià)格 仙桃400電話辦理 重慶慶云企業(yè)400電話到哪申請(qǐng)

什么是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()
}

以上就是詳解golang中的method的詳細(xì)內(nèi)容,更多關(guān)于golang中的method的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 詳解Golang使用MongoDB通用操作
  • Golang 如何判斷數(shù)組某個(gè)元素是否存在(isset)
  • golang獲取網(wǎng)卡信息操作
  • golang判斷net.Conn 是否已關(guān)閉的操作
  • 解決golang json解析出現(xiàn)值為空的問(wèn)題
  • golang 獲取字符串長(zhǎng)度的案例
  • Golang獲取目錄下的文件及目錄信息操作
  • 對(duì)Golang中的runtime.Caller使用說(shuō)明
  • 如何判斷Golang接口是否實(shí)現(xiàn)的操作

標(biāo)簽:安康 遼寧 儋州 物業(yè)服務(wù) 電子產(chǎn)品 西雙版納 海南 青海

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解golang中的method》,本文關(guān)鍵詞  詳解,golang,中的,method,詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解golang中的method》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于詳解golang中的method的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章