最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

在前面的 一文熟悉 Go 函數(shù) 文章中,介紹了 Go 函數(shù)的聲明,函數(shù)的幾種形式如匿名函數(shù)、閉包、基于函數(shù)的自定義類型和函數(shù)參數(shù)詳解等,而本文將對(duì)方法進(jìn)行介紹,方法的本質(zhì)就是函數(shù),介紹方法的同時(shí)也會(huì)順帶對(duì)比其與函數(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
}

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

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

方法的調(diào)用

通過(guò) 變量.方法名(參數(shù)) 的方式對(duì)方法進(jìn)行調(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)建一個(gè) person 變量,然后調(diào)用 SetAge 函數(shù)。

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

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

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

type Person struct {
        age int
}

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

對(duì)于 GetAge 方法,作用是返回年齡,沒(méi)有涉及到修改年齡的操作,因此 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 涉及到對(duì)結(jié)構(gòu)體屬性值修改的操作,因此 receiver 部分使用指針類型,通過(guò)指針,可以對(duì)所指向地址的變量進(jìn)行修改操作。

方法的約束

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

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

因?yàn)榛緮?shù)據(jù)類型所定義的位置,是不在我們所編碼的包里面的。

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

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

小結(jié)

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

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

相關(guān)文章

  • GO excelize讀取excel進(jìn)行時(shí)間類型轉(zhuǎn)換的示例代碼(自動(dòng)轉(zhuǎn)換)

    GO excelize讀取excel進(jìn)行時(shí)間類型轉(zhuǎn)換的示例代碼(自動(dòng)轉(zhuǎn)換)

    我們經(jīng)常會(huì)遇到如何自動(dòng)識(shí)別excel中的時(shí)間類型數(shù)據(jù)并轉(zhuǎn)化成對(duì)應(yīng)的 "Y-m-d H:i:s"類型數(shù)據(jù),本文小編給大家介紹了GO excelize讀取excel進(jìn)行時(shí)間類型轉(zhuǎn)換的示例代碼(自動(dòng)轉(zhuǎn)換),需要的朋友可以參考下
    2024-10-10
  • 一文帶你熟悉Go語(yǔ)言中的for循環(huán)

    一文帶你熟悉Go語(yǔ)言中的for循環(huán)

    這篇文章主要和大家分享一下Go語(yǔ)言中for循環(huán)的定義與使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語(yǔ)言有一定的幫助,需要的可以參考一下
    2022-11-11
  • 一文帶你吃透Golang中的類型轉(zhuǎn)換

    一文帶你吃透Golang中的類型轉(zhuǎn)換

    Golang是一種強(qiáng)類型語(yǔ)言,所以Golang的類型轉(zhuǎn)換和C/C++ java等語(yǔ)言的類型轉(zhuǎn)換還有點(diǎn)區(qū)別,本文講通過(guò)一些簡(jiǎn)單的示例帶大家深入了解一下Golang中的類型轉(zhuǎn)換,需要的可以參考下
    2023-05-05
  • 一文帶你全面掌握Go語(yǔ)言中的正則表達(dá)式

    一文帶你全面掌握Go語(yǔ)言中的正則表達(dá)式

    正則表達(dá)式是一種強(qiáng)大的模式匹配工具,能夠在文本中進(jìn)行靈活的搜索和替換操作,本文將介紹?Golang?中的正則表達(dá)式語(yǔ)法,包括常用的匹配符號(hào)、模式修飾符以及示例應(yīng)用,希望對(duì)大家有所幫助
    2023-05-05
  • 解析Go 標(biāo)準(zhǔn)庫(kù) http.FileServer 實(shí)現(xiàn)靜態(tài)文件服務(wù)

    解析Go 標(biāo)準(zhǔn)庫(kù) http.FileServer 實(shí)現(xiàn)靜態(tài)文件服務(wù)

    http.FileServer 方法屬于標(biāo)準(zhǔn)庫(kù) net/http,返回一個(gè)使用 FileSystem 接口 root 提供文件訪問(wèn)服務(wù)的 HTTP 處理器。下面通過(guò)本文給大家介紹Go 標(biāo)準(zhǔn)庫(kù) http.FileServer 實(shí)現(xiàn)靜態(tài)文件服務(wù)的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2018-08-08
  • 詳解如何在Go中循環(huán)中使用Defer關(guān)鍵字示例詳解

    詳解如何在Go中循環(huán)中使用Defer關(guān)鍵字示例詳解

    這篇文章主要為大家介紹了詳解如何在Go中循環(huán)中使用Defer關(guān)鍵字示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • 總結(jié)Go語(yǔ)言中defer的使用和注意要點(diǎn)

    總結(jié)Go語(yǔ)言中defer的使用和注意要點(diǎn)

    Go語(yǔ)言中的defer關(guān)鍵字實(shí)現(xiàn)比較特殊的功能,這篇文章給大家總結(jié)了關(guān)于Go語(yǔ)言中defer的使用和注意要點(diǎn),有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2016-09-09
  • golang hack插件開(kāi)發(fā)動(dòng)態(tài)鏈接庫(kù)實(shí)例探究

    golang hack插件開(kāi)發(fā)動(dòng)態(tài)鏈接庫(kù)實(shí)例探究

    這篇文章主要為大家介紹了golang hack插件開(kāi)發(fā)動(dòng)態(tài)鏈接庫(kù)實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • golang 生成二維碼海報(bào)的實(shí)現(xiàn)代碼

    golang 生成二維碼海報(bào)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了golang 生成二維碼海報(bào)的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • go?REST?API設(shè)計(jì)模式和反模式示例解析

    go?REST?API設(shè)計(jì)模式和反模式示例解析

    在這篇文章中,我們將探討一些常見(jiàn)的REST?API設(shè)計(jì)模式和開(kāi)發(fā)者應(yīng)該注意的反模式,我們還將提供Golang和Open?API?Schema的代碼片段來(lái)幫助說(shuō)明這些概念,有需要的朋友可以借鑒參考下
    2023-09-09

最新評(píng)論

达州市| 镇康县| 文化| 博乐市| 五大连池市| 紫云| 成安县| 五寨县| 大宁县| 教育| 庆城县| 青铜峡市| 瓮安县| 宜城市| 陇西县| 霍邱县| 通化市| 民丰县| 师宗县| 海安县| 台东县| 新邵县| 探索| 婺源县| 大化| 揭阳市| 岑巩县| 鲜城| 崇左市| 静海县| 桃江县| 江川县| 贵南县| 冷水江市| 阿勒泰市| 涿州市| 砀山县| 滨海县| 绩溪县| 同江市| 广昌县|