久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      go語(yǔ)言有構(gòu)造函數(shù)嗎

      go語(yǔ)言沒(méi)有構(gòu)造函數(shù)。go語(yǔ)言作為結(jié)構(gòu)化的語(yǔ)言是沒(méi)有面向?qū)ο笳Z(yǔ)言中的構(gòu)造方法的,不過(guò)可以通過(guò)一些方式實(shí)現(xiàn)類似的面向?qū)ο笳Z(yǔ)言中構(gòu)造方法的效果,也就是使用結(jié)構(gòu)體初始化的過(guò)程來(lái)模擬實(shí)現(xiàn)構(gòu)造函數(shù)。

      go語(yǔ)言有構(gòu)造函數(shù)嗎

      本教程操作環(huán)境:windows7系統(tǒng)、GO 1.18版本、Dell G3電腦。

      構(gòu)造函數(shù)是一種特殊的方法,主要用來(lái)在創(chuàng)建對(duì)象時(shí)初始化對(duì)象,即為對(duì)象成員變量賦初始值。特別的一個(gè)類可以有多個(gè)構(gòu)造函數(shù) ,可根據(jù)其參數(shù)個(gè)數(shù)的不同或參數(shù)類型的不同來(lái)區(qū)分它們,即構(gòu)造函數(shù)的重載。

      Golang作為結(jié)構(gòu)化的語(yǔ)言是沒(méi)有面向?qū)ο笳Z(yǔ)言中的構(gòu)造方法的,但是Golang卻可以像C++一樣實(shí)現(xiàn)類似繼承、構(gòu)造函數(shù)一樣等面向?qū)ο缶幊痰乃枷牒头椒ā?/p>

      因?yàn)?struct 是值類型,如果結(jié)構(gòu)體比較復(fù)雜的話,值拷貝 性能開(kāi)銷會(huì)比較大,所以該構(gòu)造函數(shù)返回的是結(jié)構(gòu)體指針類型。

      規(guī)范

      • New 關(guān)鍵字開(kāi)頭

      • 返回結(jié)構(gòu)體指針

      多種方式創(chuàng)建和初始化結(jié)構(gòu)體——模擬構(gòu)造函數(shù)重載

      如果使用結(jié)構(gòu)體描述貓的特性,那么根據(jù)貓的顏色和名字可以有不同種類的貓,那么不同的顏色和名字就是結(jié)構(gòu)體的字段,同時(shí)可以使用顏色和名字構(gòu)造不同種類的貓的實(shí)例,這個(gè)過(guò)程可以參考下面的代碼:

      type Cat struct {     Color string     Name  string } func NewCatByName(name string) *Cat {     return &Cat{         Name: name,     } } func NewCatByColor(color string) *Cat {     return &Cat{         Color: color,     } }
      登錄后復(fù)制

      代碼說(shuō)明如下:

      • 第 1 行定義 Cat 結(jié)構(gòu),包含顏色和名字字段。

      • 第 6 行定義用名字構(gòu)造貓結(jié)構(gòu)的函數(shù),返回 Cat 指針。

      • 第 7 行取地址實(shí)例化貓的結(jié)構(gòu)體。

      • 第 8 行初始化貓的名字字段,忽略顏色字段。

      • 第 12 行定義用顏色構(gòu)造貓結(jié)構(gòu)的函數(shù),返回 Cat 指針。

      在這個(gè)例子中,顏色和名字兩個(gè)屬性的類型都是字符串,由于Go語(yǔ)言中沒(méi)有函數(shù)重載,為了避免函數(shù)名字沖突,使用 NewCatByName() 和 NewCatByColor() 兩個(gè)不同的函數(shù)名表示不同的 Cat 構(gòu)造過(guò)程。

      帶有父子關(guān)系的結(jié)構(gòu)體的構(gòu)造和初始化——模擬父級(jí)構(gòu)造調(diào)用

      黑貓是一種貓,貓是黑貓的一種泛稱,同時(shí)描述這兩種概念時(shí),就是派生,黑貓派生自貓的種類,使用結(jié)構(gòu)體描述貓和黑貓的關(guān)系時(shí),將貓(Cat)的結(jié)構(gòu)體嵌入到黑貓(BlackCat)中,表示黑貓擁有貓的特性,然后再使用兩個(gè)不同的構(gòu)造函數(shù)分別構(gòu)造出黑貓和貓兩個(gè)結(jié)構(gòu)體實(shí)例,參考下面的代碼:

      type Cat struct {     Color string     Name  string } type BlackCat struct {     Cat  // 嵌入Cat, 類似于派生 } // “構(gòu)造基類” func NewCat(name string) *Cat {     return &Cat{         Name: name,     } } // “構(gòu)造子類” func NewBlackCat(color string) *BlackCat {     cat := &BlackCat{}     cat.Color = color     return cat }
      登錄后復(fù)制

      代碼說(shuō)明如下:

      • 第 6 行,定義 BlackCat 結(jié)構(gòu),并嵌入了 Cat 結(jié)構(gòu)體,BlackCat 擁有 Cat 的所有成員,實(shí)例化后可以自由訪問(wèn) Cat 的所有成員。

      • 第 11 行,NewCat() 函數(shù)定義了 Cat 的構(gòu)造過(guò)程,使用名字作為參數(shù),填充 Cat 結(jié)構(gòu)體。

      • 第 18 行,NewBlackCat() 使用 color 作為參數(shù),構(gòu)造返回 BlackCat 指針。

      • 第 19 行,實(shí)例化 BlackCat 結(jié)構(gòu),此時(shí) Cat 也同時(shí)被實(shí)例化。

      • 第 20 行,填充 BlackCat 中嵌入的 Cat 顏色屬性,BlackCat 沒(méi)有任何成員,所有的成員都來(lái)自于 Cat。

      這個(gè)例子中,Cat 結(jié)構(gòu)體類似于面向?qū)ο笾械摹盎悺?,BlackCat 嵌入 Cat 結(jié)構(gòu)體,類似于面向?qū)ο笾械摹芭缮保瑢?shí)例化時(shí),BlackCat 中的 Cat 也會(huì)一并被實(shí)例化。

      總之,Go語(yǔ)言中沒(méi)有提供構(gòu)造函數(shù)相關(guān)的特殊機(jī)制,用戶根據(jù)自己的需求,將參數(shù)使用函數(shù)傳遞到結(jié)構(gòu)體構(gòu)造參數(shù)中即可完成構(gòu)造函數(shù)的任務(wù)。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)