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

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

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

組合字面量

組合字面量是最直接方式初始化Go對象,假設(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{}{}

當然還可以直接個屬性賦值:

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

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

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屬性可以為空,如果沒有初始化則為nil,這可能導(dǎo)致錯誤。

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

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

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

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

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

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

當構(gòu)造屬性時,可能依賴其他系統(tǒng)或庫會產(chǎn)生錯誤,這時最好返回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
}

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

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

構(gòu)造函數(shù)可以直接返回interface類型,同時在其中初始化具體類型。如果我們想將結(jié)構(gòu)設(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,
	}
}

最佳實踐

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

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

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

主包類型

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

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

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

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    詳解Golang中的各種時間操作

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

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

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

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

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

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

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

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

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

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

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

最新評論

容城县| 临泉县| 崇州市| 周宁县| 都昌县| 九寨沟县| 吉首市| 望谟县| 隆安县| 察雅县| 郁南县| 紫金县| 康定县| 叙永县| 旬阳县| 灵山县| 武陟县| 黄平县| 唐河县| 兴国县| 楚雄市| 灯塔市| 大同市| 巧家县| 涟源市| 江阴市| 景洪市| 微山县| 湖南省| 石嘴山市| 米脂县| 信阳市| 中卫市| 泽库县| 克什克腾旗| 龙井市| 河曲县| 长宁县| 保德县| 扶绥县| 罗山县|