欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go語言中嵌套結(jié)構(gòu)體的實現(xiàn)

 更新時間:2024年09月26日 11:29:20   作者:阿賈克斯的黎明  
在Go語言中,嵌套結(jié)構(gòu)體可定義為一個結(jié)構(gòu)體內(nèi)包含另一個結(jié)構(gòu)體,嵌套可以是值嵌套或指針嵌套,兩者在內(nèi)存分配和修改影響上有顯著區(qū)別,本文就來詳細(xì)的介紹一下,感興趣的可以了解一下

在 Go 語言中,嵌套結(jié)構(gòu)體是指在一個結(jié)構(gòu)體內(nèi)部定義另一個結(jié)構(gòu)體。

例如:

type InnerStruct struct {
    Field1 int
    Field2 string
}

type OuterStruct struct {
    Inner InnerStruct
}

在上述示例中,`OuterStruct` 結(jié)構(gòu)體嵌套了 `InnerStruct` 結(jié)構(gòu)體。

當(dāng)嵌套結(jié)構(gòu)體中帶有 `*` 時,表示是指針嵌套;不帶 `*` 時,表示是值嵌套。

區(qū)別主要在于內(nèi)存分配和修改的影響范圍:

1. 內(nèi)存分配:
    - 值嵌套:在包含結(jié)構(gòu)體實例化時,會為嵌套的結(jié)構(gòu)體分配內(nèi)存空間,并復(fù)制其值。
    - 指針嵌套:只會為指針分配內(nèi)存空間,實際的嵌套結(jié)構(gòu)體數(shù)據(jù)在其他地方分配。

2. 修改影響:
    - 值嵌套:修改包含結(jié)構(gòu)體中的嵌套結(jié)構(gòu)體的值,不會影響到其他使用相同嵌套結(jié)構(gòu)體類型的結(jié)構(gòu)體實例中的值。
    - 指針嵌套:通過指針修改嵌套結(jié)構(gòu)體的值,所有指向同一嵌套結(jié)構(gòu)體的指針看到的值都會改變。

例如:

package main

import "fmt"

type InnerStruct struct {
    Value int
}

type OuterStruct1 struct {
    Inner InnerStruct
}

type OuterStruct2 struct {
    Inner *InnerStruct
}

func modifyValue1(outer OuterStruct1) {
    outer.Inner.Value = 100 
    // 這里的修改不會影響到傳入前的 outer 實例
}

func modifyValue2(outer OuterStruct2) {
    outer.Inner.Value = 100 
    // 這里的修改會影響到傳入前指向同一 InnerStruct 實例的所有指針
}

func main() {
    inner := &InnerStruct{Value: 50}

    outer1 := OuterStruct1{Inner: *inner}
    modifyValue1(outer1)
    fmt.Println(outer1.Inner.Value) 

    outer2 := OuterStruct2{Inner: inner}
    modifyValue2(outer2)
    fmt.Println(outer2.Inner.Value) 
}

到此這篇關(guān)于go語言中嵌套結(jié)構(gòu)體的實現(xiàn)的文章就介紹到這了,更多相關(guān)go語言 嵌套結(jié)構(gòu)體內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 詳解Golang中channel的實現(xiàn)

    詳解Golang中channel的實現(xiàn)

    channel俗稱管道,用于數(shù)據(jù)傳遞或數(shù)據(jù)共享,其本質(zhì)是一個先進(jìn)先出的隊列,使用goroutine+channel進(jìn)行數(shù)據(jù)通訊簡單高效,同時也線程安全,本文就給大家講講Golang中channel的實現(xiàn),需要的朋友可以參考下
    2023-09-09
  • Golang如何調(diào)用Python代碼詳解

    Golang如何調(diào)用Python代碼詳解

    這篇文章主要給大家介紹了關(guān)于Golang如何調(diào)用Python代碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • 手把手教你如何在Goland中創(chuàng)建和運行項目

    手把手教你如何在Goland中創(chuàng)建和運行項目

    歡迎來到本指南!我們將手把手地教您在Goland中如何創(chuàng)建、配置并運行項目,通過簡單的步驟,您將迅速上手這款強大的集成開發(fā)環(huán)境(IDE),輕松實現(xiàn)您的編程夢想,讓我們一起開啟這段精彩的旅程吧!
    2024-02-02
  • go gin中間件關(guān)于 c.next()、c.abort()和return的使用小結(jié)

    go gin中間件關(guān)于 c.next()、c.abort()和return的使用小結(jié)

    中間件的執(zhí)行順序是按照注冊順序執(zhí)行的,中間件可以通過 c.abort() + retrurn 來中止當(dāng)前中間件,后續(xù)中間件和處理器的處理流程,?這篇文章給大家介紹go gin中間件關(guān)于 c.next()、c.abort()和return的使用小結(jié),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • 用gin開發(fā)的golang項目三種開發(fā)模式方式

    用gin開發(fā)的golang項目三種開發(fā)模式方式

    這篇文章主要介紹了用gin開發(fā)的golang項目三種開發(fā)模式方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 一文理解Go 中的可尋址和不可尋址

    一文理解Go 中的可尋址和不可尋址

    如果字典的元素不存在,則返回零值,而零值是不可變對象,如果能尋址問題就大了。而如果字典的元素存在,考慮到 Go 中 map 實現(xiàn)中元素的地址是變化的,這意味著尋址的結(jié)果也是無意義的。下面我們就圍繞這個話題寫一篇文章吧,需要的朋友可以參考一下
    2021-10-10
  • Golang基礎(chǔ)學(xué)習(xí)之map的示例詳解

    Golang基礎(chǔ)學(xué)習(xí)之map的示例詳解

    哈希表是常見的數(shù)據(jù)結(jié)構(gòu),有的語言會將哈希稱作字典或者映射,在Go中,哈希就是常見的數(shù)據(jù)類型map,本文就來聊聊Golang中map的相關(guān)知識吧
    2023-03-03
  • Go 1.18新特性之泛型的全面講解

    Go 1.18新特性之泛型的全面講解

    本文力求能讓未接觸過泛型編程的人也能較好理解Go的泛型,所以行文可能略顯啰嗦。但是請相信我,看完這篇文章你能獲得對Go泛型非常全面的了解
    2023-03-03
  • Go語言的方法接受者類型用值類型還是指針類型?

    Go語言的方法接受者類型用值類型還是指針類型?

    這篇文章主要介紹了Go語言的方法接受者類型用值類型還是指針類型?本文還同時講解了關(guān)于接受者的命名方式,需要的朋友可以參考下
    2014-10-10
  • Golang交叉編譯之跨平臺編譯使用詳解

    Golang交叉編譯之跨平臺編譯使用詳解

    這篇文章主要為大家介紹了Golang交叉編譯之跨平臺編譯使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10

最新評論