站長資訊網
        最全最豐富的資訊網站

        go語言有構造函數嗎

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

        go語言有構造函數嗎

        本教程操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

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

        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語言中沒有提供構造函數相關的特殊機制,用戶根據自己的需求,將參數使用函數傳遞到結構體構造參數中即可完成構造函數的任務。

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 成人精品视频一区二区三区 | 日韩精品无码Av一区二区| 国产在线精品无码二区| 黑巨人与欧美精品一区 | 精品午夜久久福利大片| 久久精品a亚洲国产v高清不卡| 欧美精品91欧美日韩操| 国产一区二区三区欧美精品| 久久久久国产精品| 2021久久国自产拍精品| 久久久久人妻精品一区二区三区| 欧美成人精品高清在线播放| 国产精品无码久久综合网| 日本精品久久久久中文字幕| 国产精品免费观看| 国产精品露脸国语对白| 欧美精品hdvideosex4k| 亚洲精品无码乱码成人| 亚洲精品无码久久久| 欧美精品在线免费| 久久乐国产精品亚洲综合| 精品亚洲欧美无人区乱码| 国产精品区AV一区二区| 国产高清在线精品一本大道| 91无码人妻精品一区二区三区L| 狠狠色丁香婷婷综合精品视频| 99久久人妻无码精品系列 | 国产精品视频不卡| 99久久99久久精品国产片| 色综合久久精品中文字幕首页| 精品999久久久久久中文字幕| 国产69精品久久久久777| 国产精品va无码一区二区| 精品国产第一国产综合精品| 国产午夜精品免费一区二区三区| 国精品午夜福利视频不卡| 国产亚洲欧美精品久久久| 国产精品186在线观看在线播放| 国产精品涩涩涩视频网站| 精品久久久久久国产潘金莲| 99re热视频这里只精品|