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

Golang創(chuàng)建構(gòu)造函數(shù)的方法超詳細(xì)講解

 更新時(shí)間:2023年01月28日 14:51:10   作者:夢(mèng)想畫(huà)家  
構(gòu)造器一般面向?qū)ο笳Z(yǔ)言的典型特性,用于初始化變量。Go語(yǔ)言沒(méi)有任何具體構(gòu)造器,但我們能使用該特性去初始化變量。本文介紹不同類型構(gòu)造器的差異及其應(yīng)用場(chǎng)景

組合字面量

組合字面量是最直接方式初始化Go對(duì)象,假設(shè)定義了Book類型,使用字面量初始化代碼如下:

type Book struct {
  title string
  pages int
}
// creating a new struct instance
b := Book{}
// creating a pointer to a struct instance
bp := &Book{}
// creating an empty value
nothing := struct{}{}

當(dāng)然還可以直接個(gè)屬性賦值:

b := Book{
  title: "Julius Caesar",
  pages: 322,
}

這種方式的優(yōu)勢(shì)是語(yǔ)法直接、簡(jiǎn)單易讀。但不能給每個(gè)屬性設(shè)置缺省值。所以當(dāng)類型包括多個(gè)缺省值字段時(shí),需要重復(fù)寫(xiě)缺省值字段賦值語(yǔ)句。舉例:

type Pizza struct {
  slices int
  toppings []string
}
somePizza := Pizza{
  slices: 6,
  toppings: []string{"pepperoni"},
}
otherPizza := Pizza{
  slices: 6,
  toppings: []string{"onion", "pineapple"},
}

上面示例每次都設(shè)置slices屬性為6,另外,如果toppings屬性可以為空,如果沒(méi)有初始化則為nil,這可能導(dǎo)致錯(cuò)誤。

自定義構(gòu)造函數(shù)

如果屬性需要設(shè)置默認(rèn)值或進(jìn)行初始化,自定義構(gòu)造函數(shù)可能會(huì)很有用。下面通過(guò)NewPizza構(gòu)造函數(shù)定義Pizza實(shí)例:

func NewPizza(toppings []string) () {
  if toppings == nil {
    toppings = []string{}
  }
  return Pizza{
    slices: 6,
    toppings: toppings,
  }
}

通過(guò)使用構(gòu)造函數(shù)可以自定義實(shí)例創(chuàng)建過(guò)程:

  • 給字段設(shè)置缺省值,當(dāng)然還可以利用可選參數(shù)方式給不同屬性設(shè)置默認(rèn)值。
  • 還可以執(zhí)行合理性檢查,如toppings是否為nil并初始化??梢岳胢ake或new構(gòu)造一些數(shù)據(jù)類型并更好控制內(nèi)存和容量。

從構(gòu)造函數(shù)返回錯(cuò)誤

當(dāng)構(gòu)造屬性時(shí),可能依賴其他系統(tǒng)或庫(kù)會(huì)產(chǎn)生錯(cuò)誤,這時(shí)最好返回error。

func NewRemotePizza(url string) (Pizza, error) {
  // toppings are received from a remote URL, which may fail
  toppings, err := getToppings(url)
  if err != nil {
    // if an error occurs, return the wrapped error along with an empty
    // Pizza instance
    return Pizza{}, fmt.Errorf("could not construct new Pizza: %v", err)
  }
  return Pizza{
    slices:   6,
    toppings: toppings,
  }, nil
}

返回錯(cuò)誤有助于將故障條件封裝在構(gòu)造函數(shù)本身中。

interface構(gòu)造函數(shù)

構(gòu)造函數(shù)可以直接返回interface類型,同時(shí)在其中初始化具體類型。如果我們想將結(jié)構(gòu)設(shè)為私有,同時(shí)將其初始化設(shè)為公共,這將很有幫助。

還是用Pizza類型舉例,如果有bakery接口,判斷pizza是否可烘烤類型。首先創(chuàng)建Bakeable接口,然后給Pizza類型增加isBaked字段:

// Pizza implements Bakeable
type Bakeable interface {
	Bake()
}
type Pizza struct {
	slices   int
	toppings []string
	isBaked  bool
}
func (p Pizza) Bake() {
	p.isBaked = true
}
// this constructor will return a `Bakeable`
// and not a `Pizza`
func NewUnbakedPizza(toppings []string) Bakeable {
	return Pizza{
		slices:   6,
		toppings: toppings,
	}
}

最佳實(shí)踐

讓我們來(lái)看看Go中關(guān)于構(gòu)造函數(shù)命名和組織的一些約定:

基本構(gòu)造函數(shù)

對(duì)于簡(jiǎn)單構(gòu)造函數(shù)返回類型(如Abc,或Xyz類型),則函數(shù)分別命名為NewAbc和NewXyz。對(duì)于Pizza實(shí)例,則構(gòu)造函數(shù)命名為NewPizza。

主包類型

如果在給定包中,初始化變量為主包類型,可以直接命名為New(無(wú)需前綴)。舉例,Pizza結(jié)構(gòu)定義在pizza包中,構(gòu)造函數(shù)定義如下:

package pizza
type Pizza struct {
  // ...
}
func New(toppings []string) Pizza {
  // ...
}

當(dāng)在其他包中調(diào)用函數(shù)時(shí),代碼為 p := pizza.New()

多個(gè)構(gòu)造函數(shù)

有時(shí)相同類型可能有多個(gè)構(gòu)造函數(shù)。為此,我們使用NewXyz名稱的變體來(lái)描述每個(gè)方法。舉例,下面有三個(gè)方法創(chuàng)建Pizza:

  • NewPizza 為主構(gòu)造方法.
  • NewRemotePizza 基于遠(yuǎn)處資源的構(gòu)造方法.
  • NewUnbakedPizza 返回Bakeable接口類型的構(gòu)造方法.

到此這篇關(guān)于Golang創(chuàng)建構(gòu)造函數(shù)的方法超詳細(xì)講解的文章就介紹到這了,更多相關(guān)Go創(chuàng)建構(gòu)造函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語(yǔ)言中內(nèi)建函數(shù)make的使用

    Go語(yǔ)言中內(nèi)建函數(shù)make的使用

    在Go語(yǔ)言編程中,make函數(shù)是一個(gè)重要的內(nèi)建函數(shù),它用于創(chuàng)建和初始化切片、映射和通道,握 make 的使用方法,可以幫助我們更高效地管理內(nèi)存和數(shù)據(jù)結(jié)構(gòu)
    2024-09-09
  • golang 實(shí)現(xiàn)每隔幾分鐘執(zhí)行一個(gè)函數(shù)

    golang 實(shí)現(xiàn)每隔幾分鐘執(zhí)行一個(gè)函數(shù)

    這篇文章主要介紹了golang 實(shí)現(xiàn)每隔幾分鐘執(zhí)行一個(gè)函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Golang Type關(guān)鍵字的使用

    Golang Type關(guān)鍵字的使用

    Type關(guān)鍵字在Go語(yǔ)言中作用很重要,比如定義結(jié)構(gòu)體,接口,還可以自定義類型,定義類型別名等,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • golang?db事務(wù)的統(tǒng)一封裝的實(shí)現(xiàn)

    golang?db事務(wù)的統(tǒng)一封裝的實(shí)現(xiàn)

    這篇文章主要介紹了golang db事務(wù)的統(tǒng)一封裝的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 詳解Golang中的各種時(shí)間操作

    詳解Golang中的各種時(shí)間操作

    這篇文章主要介紹了詳解Golang中的各種時(shí)間操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 使用Golang實(shí)現(xiàn)Sm2加解密的代碼詳解

    使用Golang實(shí)現(xiàn)Sm2加解密的代碼詳解

    本文主要介紹了Go語(yǔ)言實(shí)現(xiàn)Sm2加解密的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • 詳解Go中Set的實(shí)現(xiàn)方式

    詳解Go中Set的實(shí)現(xiàn)方式

    這篇文章主要介紹了詳解Go中Set的實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • go語(yǔ)言編程實(shí)現(xiàn)遞歸函數(shù)示例詳解

    go語(yǔ)言編程實(shí)現(xiàn)遞歸函數(shù)示例詳解

    這篇文章主要為大家介紹了go語(yǔ)言編程實(shí)現(xiàn)遞歸函數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • go實(shí)現(xiàn)服務(wù)優(yōu)雅關(guān)閉的示例

    go實(shí)現(xiàn)服務(wù)優(yōu)雅關(guān)閉的示例

    本文主要介紹了go實(shí)現(xiàn)服務(wù)優(yōu)雅關(guān)閉的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 一文帶你了解Go語(yǔ)言中鎖的實(shí)現(xiàn)

    一文帶你了解Go語(yǔ)言中鎖的實(shí)現(xiàn)

    這篇文章主要帶大家一起學(xué)習(xí)一下go鎖和讀寫(xiě)鎖的總結(jié)文檔,?主要從"參考"部分的文章結(jié)合源碼學(xué)習(xí),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03

最新評(píng)論

关岭| 高密市| 渝北区| 上高县| 太白县| 元氏县| 黑河市| 南靖县| 江西省| 衡阳县| 台州市| 宁城县| 黄龙县| 鲜城| 故城县| 积石山| 资中县| 叙永县| 安溪县| 洪江市| 渝中区| 柳州市| 蒲江县| 临颍县| 博乐市| 太白县| 常州市| 九寨沟县| 渑池县| 莫力| 灌阳县| 赤城县| 上高县| 堆龙德庆县| 略阳县| 铜鼓县| 米脂县| 龙海市| 五指山市| 巨鹿县| 沭阳县|