go语言中嵌套结构体的实现

 更新时间:2024年09月26日 11:29:20   作者:阿贾克斯的黎明  
在Go语言中,嵌套结构体可定义为一个结构体内包含另一个结构体,嵌套可以是值嵌套或指针嵌套,两者在内存分配和修改影响上有显著区别,本文就来详细的介绍一下,感兴趣的可以了解一下

在 Go 语言中,嵌套结构体是指在一个结构体内部定义另一个结构体。

例如:

type InnerStruct struct {
    Field1 int
    Field2 string
}

type OuterStruct struct {
    Inner InnerStruct
}

在上述示例中,`OuterStruct` 结构体嵌套了 `InnerStruct` 结构体。

当嵌套结构体中带有 `*` 时,表示是指针嵌套;不带 `*` 时,表示是值嵌套。

区别主要在于内存分配和修改的影响范围:

1. 内存分配:
    - 值嵌套:在包含结构体实例化时,会为嵌套的结构体分配内存空间,并复制其值。
    - 指针嵌套:只会为指针分配内存空间,实际的嵌套结构体数据在其他地方分配。

2. 修改影响:
    - 值嵌套:修改包含结构体中的嵌套结构体的值,不会影响到其他使用相同嵌套结构体类型的结构体实例中的值。
    - 指针嵌套:通过指针修改嵌套结构体的值,所有指向同一嵌套结构体的指针看到的值都会改变。

例如:

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

到此这篇关于go语言中嵌套结构体的实现的文章就介绍到这了,更多相关go语言 嵌套结构体内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Go爬虫(http、goquery和colly)详解

    Go爬虫(http、goquery和colly)详解

    goquery可以避免操作复杂的正则表达式,它可以直接根据url获取一个Document对象,然后根据标签选择器、类选择器和id选择器获取相应的选择对象,进行自定义的操作,这篇文章主要介绍了Go爬虫(http、goquery和colly),需要的朋友可以参考下
    2022-09-09
  • 详解Go 依赖管理 go mod tidy

    详解Go 依赖管理 go mod tidy

    这篇文章主要为大家介绍了详解Go 依赖管理 go mod tidy,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • golang switch的语法使用小结

    golang switch的语法使用小结

    本文主要介绍了golang switch的语法使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-02-02
  • GO语言学习之语句块的实现

    GO语言学习之语句块的实现

    本文主要介绍了GO语言学习之语句块的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-06-06
  • go单体日志采集zincsearch方案实现

    go单体日志采集zincsearch方案实现

    这篇文章主要为大家介绍了go单体日志采集zincsearch方案实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 300行代码实现go语言即时通讯聊天室

    300行代码实现go语言即时通讯聊天室

    本文主要介绍了300行代码实现go语言即时通讯聊天室,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Go语言中slice类型的使用小结

    Go语言中slice类型的使用小结

    本文主要介绍了Go语言中slice类型的使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-03-03
  • Go语言如何高效的进行字符串拼接(6种方式对比分析)

    Go语言如何高效的进行字符串拼接(6种方式对比分析)

    本文主要介绍了Go语言如何高效的进行字符串拼接(6种方式对比分析),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Go语言中的日志管理小结

    Go语言中的日志管理小结

    本文主要介绍了Go语言中的日志管理小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-03-03
  • go程序员日常开发效率神器汇总

    go程序员日常开发效率神器汇总

    这篇文章主要介绍了go程序员开发效率神器包含了go常用开发工具,go调试工具,go常用网站,golang常用库,需要的朋友可以参考下
    2022-11-11

最新评论