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

一文帶你了解Go語言中方法的調(diào)用

 更新時間:2022年12月02日 08:23:16   作者:陳明勇  
這篇文章主要和大家分享一下Go語言中的方法的調(diào)用,文中的示例代碼講解詳細,對我們學(xué)習Go語言有一定的幫助,需要的小伙伴可以參考一下

前言

在前面的 一文熟悉 Go 函數(shù) 文章中,介紹了 Go 函數(shù)的聲明,函數(shù)的幾種形式如匿名函數(shù)、閉包、基于函數(shù)的自定義類型和函數(shù)參數(shù)詳解等,而本文將對方法進行介紹,方法的本質(zhì)就是函數(shù),介紹方法的同時也會順帶對比其與函數(shù)的不同之處。

方法

在 Go 中,我們可以為任何的數(shù)據(jù)類型定義方法(指針或接口除外),現(xiàn)在讓我們看一看方法的聲明和組成部分以及與函數(shù)有什么不同之處。

type Person struct {
	age int
}

func (p *Person) SetAge(age int) error {
	if age < 0 {
		return errors.New("年齡不能小于 0 ")
	}
	p.age = age
	return nil
}

上述代碼定義了一個結(jié)構(gòu)體 Person,此結(jié)構(gòu)體包含一個 age 屬性,一個 SetAge 方法,此方法只作用于 Person 結(jié)構(gòu)體。我們可以看到,該方法包含六部分,分別為:

  • 1、關(guān)鍵字 聲明方法時,必須以 func 關(guān)鍵字開頭,還記得函數(shù)的聲明嗎,也是以這個關(guān)鍵字開頭。
  • 2、receiver 部分 (p *Person) 這部分,在 Go 中稱為 receiver 部分,里面的參數(shù)稱為 receiver 參數(shù),相比于函數(shù),方法與其的聲明區(qū)別就在于多了這一部分。
  • 3、方法名。 Go 推薦使用駝峰命名的方式,和變量的命名規(guī)則一樣,首字母大寫的方法名可以在包外訪問,小寫的只能在包內(nèi)訪問。
  • 4、參數(shù)列表 參數(shù)列表中聲明了在方法體里所使用到的變量。參數(shù)列表位于方法名后面,用括號包裹著,多個參數(shù)使用逗號分隔開。
  • 5、返回值列表 返回值為函數(shù)執(zhí)行后的一個結(jié)果,上述代碼只有一個返回值,如果有多個返回值,需要用括號包裹著,返回值之間用逗號分隔開。
  • 6、方法體 大括號內(nèi)就是方法體,存放著方法的具體實現(xiàn)。

方法的調(diào)用

通過 變量.方法名(參數(shù)) 的方式對方法進行調(diào)用。例如:

import (
	"errors"
	"fmt"
)

type Person struct {
	age int
}

func (p *Person) SetAge(age int) error {
	if age < 0 {
		return errors.New("年齡不能小于 0 ")
	}
	p.age = age
	return nil
}

func main() {
	person := Person{}
	err := person.SetAge(18)
	if err != nil {
		return
	}
	fmt.Println(person.age) // 18
}

創(chuàng)建一個 person 變量,然后調(diào)用 SetAge 函數(shù)。

Receiver 參數(shù)類型的選擇

Receiver 部分,我們可以綁定值類型,也可以綁定指針類型,這兩種類型什么時候使用呢?

如果方法體里不涉及到修改結(jié)構(gòu)體變量的屬性值,使用值類型

type Person struct {
        age int
}

func (p Person) GetAge() int {
        return p.age
}

對于 GetAge 方法,作用是返回年齡,沒有涉及到修改年齡的操作,因此 receiver 部分,選擇 Person 類型就可以。

如果方法體里有修改結(jié)構(gòu)體變量的屬性值的操作,使用指針類型

type Person struct {
	age int
}

func (p *Person) SetAge(age int) error {
	if age < 0 {
		return errors.New("年齡不能小于 0 ")
	}
	p.age = age
	return nil
}

SetAge 涉及到對結(jié)構(gòu)體屬性值修改的操作,因此 receiver 部分使用指針類型,通過指針,可以對所指向地址的變量進行修改操作。

方法的約束

Go 對方法聲明的位置是有約束的,我們不能跨越包去聲明一個類型的方法,根據(jù)這個特點我們可以發(fā)現(xiàn):

不能為基本數(shù)據(jù)類型聲明方法

因為基本數(shù)據(jù)類型所定義的位置,是不在我們所編碼的包里面的。

不能跨越包為其他包的類型聲明方法

這個是 Go 的所規(guī)定的的。

小結(jié)

本文介紹了 Go 方法的聲明方式、組成部分和其與函數(shù)的不同點,同時指出Receiver 參數(shù)類型在不同場景下的選擇,最后介紹了 Go 對方法約束的體現(xiàn)。

到此這篇關(guān)于一文帶你了解Go語言中方法的調(diào)用的文章就介紹到這了,更多相關(guān)Go語言方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang代碼中調(diào)用Linux命令

    golang代碼中調(diào)用Linux命令

    本文主要介紹了golang代碼中調(diào)用Linux命令,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2023-02-02
  • Go依賴注入工具wire的具體使用

    Go依賴注入工具wire的具體使用

    本文主要介紹了Go依賴注入工具wire的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2023-05-05
  • GO語言實現(xiàn)文件上傳代碼分享

    GO語言實現(xiàn)文件上傳代碼分享

    本文給大家分享的是一則使用golang實現(xiàn)文件上傳的代碼,主要是使用os.Create創(chuàng)建文件,io.Copy來保存文件,思路非常清晰,這里推薦給大家,有需要的小伙伴參考下吧。
    2015-03-03
  • 一文詳解Golang的函數(shù)特性

    一文詳解Golang的函數(shù)特性

    函數(shù)是?Golang?中非常重要的組成部分之一,它們提供了代碼的可重用性和組織性。在本文中,我們將深入了解?Golang?函數(shù)的多個方面,希望對大家有所幫助
    2023-04-04
  • Go 代碼規(guī)范錯誤處理示例經(jīng)驗總結(jié)

    Go 代碼規(guī)范錯誤處理示例經(jīng)驗總結(jié)

    這篇文章主要為大家介紹了Go 代碼規(guī)范錯誤處理示例實戰(zhàn)經(jīng)驗總結(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Golang遞歸獲取目錄下所有文件方法實例

    Golang遞歸獲取目錄下所有文件方法實例

    這篇文章主要給大家介紹了關(guān)于Golang遞歸獲取目錄下所有文件的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2023-02-02
  • Go語言基礎(chǔ)設(shè)計模式之策略模式示例詳解

    Go語言基礎(chǔ)設(shè)計模式之策略模式示例詳解

    這篇文章主要為大家介紹了Go語言基礎(chǔ)設(shè)計模式之策略模式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2021-11-11
  • go內(nèi)存隊列l(wèi)ist VS slice實現(xiàn)方式對比分析

    go內(nèi)存隊列l(wèi)ist VS slice實現(xiàn)方式對比分析

    這篇文章主要為大家介紹了go內(nèi)存隊列l(wèi)ist VS slice實現(xiàn)方式對比分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Go語言基礎(chǔ)之網(wǎng)絡(luò)編程全面教程示例

    Go語言基礎(chǔ)之網(wǎng)絡(luò)編程全面教程示例

    這篇文章主要為大家介紹了Go語言基礎(chǔ)之網(wǎng)絡(luò)編程全面教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Go語言單元測試基礎(chǔ)從入門到放棄

    Go語言單元測試基礎(chǔ)從入門到放棄

    這篇文章主要介紹了Go單元測試基礎(chǔ)從入門到放棄為大家開啟Go語言單元測試第一篇章,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06

最新評論