91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

go語言有沒有構造函數

發布時間:2023-01-13 17:52:35 來源:億速云 閱讀:99 作者:iii 欄目:編程語言

這篇文章主要介紹“go語言有沒有構造函數”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“go語言有沒有構造函數”文章能幫助大家解決問題。

go語言沒有構造函數。go語言作為結構化的語言是沒有面向對象語言中的構造方法的,不過可以通過一些方式實現類似的面向對象語言中構造方法的效果,也就是使用結構體初始化的過程來模擬實現構造函數。

構造函數是一種特殊的方法,主要用來在創建對象時初始化對象,即為對象成員變量賦初始值。特別的一個類可以有多個構造函數 ,可根據其參數個數的不同或參數類型的不同來區分它們,即構造函數的重載。

Golang作為結構化的語言是沒有面向對象語言中的構造方法的,但是Golang卻可以像C++一樣實現類似繼承、構造函數一樣等面向對象編程的思想和方法。

因為 struct 是值類型,如果結構體比較復雜的話,值拷貝 性能開銷會比較大,所以該構造函數返回的是結構體指針類型。

規范

  • New 關鍵字開頭

  • 返回結構體指針

多種方式創建和初始化結構體——模擬構造函數重載

如果使用結構體描述貓的特性,那么根據貓的顏色和名字可以有不同種類的貓,那么不同的顏色和名字就是結構體的字段,同時可以使用顏色和名字構造不同種類的貓的實例,這個過程可以參考下面的代碼:

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,
    }
}

代碼說明如下:

  • 第 1 行定義 Cat 結構,包含顏色和名字字段。

  • 第 6 行定義用名字構造貓結構的函數,返回 Cat 指針。

  • 第 7 行取地址實例化貓的結構體。

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

  • 第 12 行定義用顏色構造貓結構的函數,返回 Cat 指針。

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

帶有父子關系的結構體的構造和初始化——模擬父級構造調用

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

type Cat struct {
    Color string
    Name  string
}
type BlackCat struct {
    Cat  // 嵌入Cat, 類似于派生
}
// “構造基類”
func NewCat(name string) *Cat {
    return &Cat{
        Name: name,
    }
}
// “構造子類”
func NewBlackCat(color string) *BlackCat {
    cat := &BlackCat{}
    cat.Color = color
    return cat
}

代碼說明如下:

  • 第 6 行,定義 BlackCat 結構,并嵌入了 Cat 結構體,BlackCat 擁有 Cat 的所有成員,實例化后可以自由訪問 Cat 的所有成員。

  • 第 11 行,NewCat() 函數定義了 Cat 的構造過程,使用名字作為參數,填充 Cat 結構體。

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

  • 第 19 行,實例化 BlackCat 結構,此時 Cat 也同時被實例化。

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

這個例子中,Cat 結構體類似于面向對象中的“基類”,BlackCat 嵌入 Cat 結構體,類似于面向對象中的“派生”,實例化時,BlackCat 中的 Cat 也會一并被實例化。

關于“go語言有沒有構造函數”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汽车| 湾仔区| 永安市| 洛南县| 永和县| 伊通| 六安市| 太康县| 微博| 炉霍县| 安塞县| 英山县| 苏州市| 宁化县| 客服| 泾阳县| 南昌县| 湖口县| 汕尾市| 扶沟县| 鹿泉市| 秀山| 磐安县| 太白县| 湄潭县| 巍山| 肥西县| 崇左市| 荥经县| 庄河市| 舒城县| 岳阳县| 台北县| 凌源市| 杭锦旗| 洪洞县| 如皋市| 延寿县| 清流县| 文安县| 乳源|