欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解golang中的method

 更新時間:2021年01月06日 11:05:39   作者:雨燕  
這篇文章主要介紹了golang中的method的相關資料,幫助大家更好的理解和使用golang,感興趣的朋友可以了解下

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

method的語法:

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

receiver可以看作是method的第一個參數,method并且支持繼承和重寫。

  • Go中雖沒有class,但依舊有method
  • 通過顯示說明receiver來實現(xiàn)與某個類型的結合
  • 只能為同一個包中的類型定義方法
  • receiver可以是類型的值或者指針
  • 不存在方法重載
  • 可以使用值或指針來調用方法,編譯器會自動完成轉換
  • 從某種意義上來說,方法是函數的語法糖,因為receiver其實就是方法所接收的第一個參數(Method Value vs. Method Expression)
  • 如果外部結構和嵌入結構存在同名方法,則優(yōu)先調用外部結構的方法
  • 類型別名不會擁有底層類型所附帶的方法
  • 方法可以調用結構中的非公開字段

go version go1.12

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

import (
  "fmt"
)

type Human struct {
  name string
  age int
}

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

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

// method重寫,重寫匿名字段的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"}
  // 調用method通過.訪問,就像struct訪問字段一樣
  s1.Info()
  e1.Info()
}

以上就是詳解golang中的method的詳細內容,更多關于golang中的method的資料請關注腳本之家其它相關文章!

相關文章

  • golang實現(xiàn)對docker容器心跳監(jiān)控功能

    golang實現(xiàn)對docker容器心跳監(jiān)控功能

    這篇文章主要介紹了golang實現(xiàn)對docker容器心跳監(jiān)控功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • gtoken替換jwt實現(xiàn)sso登錄的排雷避坑

    gtoken替換jwt實現(xiàn)sso登錄的排雷避坑

    這篇文章主要為大家介紹了gtoken替換jwt實現(xiàn)sso登錄的排雷避坑,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Go語言中你不知道的Interface詳解

    Go語言中你不知道的Interface詳解

    對于go語言來說,設計最精妙的應該是interface了,直白點說interface是一組method的組合。下面這篇文章主要給大家介紹了關于Go語言中你不知道的Interface的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2018-02-02
  • Go語言中利用http發(fā)起Get和Post請求的方法示例

    Go語言中利用http發(fā)起Get和Post請求的方法示例

    這篇文章主要給大家介紹了關于Go語言中利用http發(fā)起Get和Post請求的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-11-11
  • Go語言題解LeetCode1266訪問所有點的最小時間示例

    Go語言題解LeetCode1266訪問所有點的最小時間示例

    這篇文章主要為大家介紹了Go語言題解LeetCode1266訪問所有點的最小時間示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 聊聊golang中多個defer的執(zhí)行順序

    聊聊golang中多個defer的執(zhí)行順序

    這篇文章主要介紹了golang中多個defer的執(zhí)行順序,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • GPT回答go語言和C語言map操作方法對比

    GPT回答go語言和C語言map操作方法對比

    這篇文章主要為大家介紹了GPT回答go語言和C語言map操作方法對比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Golang遠程調用框架RPC的具體使用

    Golang遠程調用框架RPC的具體使用

    Remote Procedure Call (RPC) 是一種使用TCP協(xié)議從另一個系統(tǒng)調用應用程序功能執(zhí)行的方法。Go有原生支持RPC服務器實現(xiàn),本文通過簡單實例介紹RPC的實現(xiàn)過程
    2022-12-12
  • 提升Golang應用性能:深入理解Context的應用

    提升Golang應用性能:深入理解Context的應用

    本文將深入探討如何通過深入理解和正確應用Go語言中的Context來提升應用性能。需要的朋友可以參考下
    2023-09-09
  • Go語言:打造優(yōu)雅數據庫單元測試的實戰(zhàn)指南

    Go語言:打造優(yōu)雅數據庫單元測試的實戰(zhàn)指南

    Go語言數據庫單元測試入門:聚焦高效、可靠的數據庫代碼驗證!想要確保您的Go應用數據層堅如磐石嗎?本指南將手把手教您如何利用Go進行數據庫單元測試,輕松揪出隱藏的bug,打造無懈可擊的數據處理邏輯,一起來探索吧!
    2024-01-01

最新評論