go語言中嵌套結(jié)構(gòu)體的實(shí)現(xiàn)
在 Go 語言中,嵌套結(jié)構(gòu)體是指在一個(gè)結(jié)構(gòu)體內(nèi)部定義另一個(gè)結(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)體中帶有 `*` 時(shí),表示是指針嵌套;不帶 `*` 時(shí),表示是值嵌套。
區(qū)別主要在于內(nèi)存分配和修改的影響范圍:
1. 內(nèi)存分配:
- 值嵌套:在包含結(jié)構(gòu)體實(shí)例化時(shí),會(huì)為嵌套的結(jié)構(gòu)體分配內(nèi)存空間,并復(fù)制其值。
- 指針嵌套:只會(huì)為指針分配內(nèi)存空間,實(shí)際的嵌套結(jié)構(gòu)體數(shù)據(jù)在其他地方分配。
2. 修改影響:
- 值嵌套:修改包含結(jié)構(gòu)體中的嵌套結(jié)構(gòu)體的值,不會(huì)影響到其他使用相同嵌套結(jié)構(gòu)體類型的結(jié)構(gòu)體實(shí)例中的值。
- 指針嵌套:通過指針修改嵌套結(jié)構(gòu)體的值,所有指向同一嵌套結(jié)構(gòu)體的指針看到的值都會(huì)改變。
例如:
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 // 這里的修改不會(huì)影響到傳入前的 outer 實(shí)例 } func modifyValue2(outer OuterStruct2) { outer.Inner.Value = 100 // 這里的修改會(huì)影響到傳入前指向同一 InnerStruct 實(shí)例的所有指針 } 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)體的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)go語言 嵌套結(jié)構(gòu)體內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Golang中channel的實(shí)現(xiàn)
channel俗稱管道,用于數(shù)據(jù)傳遞或數(shù)據(jù)共享,其本質(zhì)是一個(gè)先進(jìn)先出的隊(duì)列,使用goroutine+channel進(jìn)行數(shù)據(jù)通訊簡(jiǎn)單高效,同時(shí)也線程安全,本文就給大家講講Golang中channel的實(shí)現(xiàn),需要的朋友可以參考下2023-09-09手把手教你如何在Goland中創(chuàng)建和運(yùn)行項(xiàng)目
歡迎來到本指南!我們將手把手地教您在Goland中如何創(chuàng)建、配置并運(yùn)行項(xiàng)目,通過簡(jiǎn)單的步驟,您將迅速上手這款強(qiáng)大的集成開發(fā)環(huán)境(IDE),輕松實(shí)現(xiàn)您的編程夢(mèng)想,讓我們一起開啟這段精彩的旅程吧!2024-02-02go gin中間件關(guān)于 c.next()、c.abort()和return的使用小結(jié)
中間件的執(zhí)行順序是按照注冊(cè)順序執(zhí)行的,中間件可以通過 c.abort() + retrurn 來中止當(dāng)前中間件,后續(xù)中間件和處理器的處理流程,?這篇文章給大家介紹go gin中間件關(guān)于 c.next()、c.abort()和return的使用小結(jié),感興趣的朋友跟隨小編一起看看吧2024-03-03用gin開發(fā)的golang項(xiàng)目三種開發(fā)模式方式
這篇文章主要介紹了用gin開發(fā)的golang項(xiàng)目三種開發(fā)模式方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01Golang基礎(chǔ)學(xué)習(xí)之map的示例詳解
哈希表是常見的數(shù)據(jù)結(jié)構(gòu),有的語言會(huì)將哈希稱作字典或者映射,在Go中,哈希就是常見的數(shù)據(jù)類型map,本文就來聊聊Golang中map的相關(guān)知識(shí)吧2023-03-03