当前位置: 代码网 > it编程>前端脚本>Golang > go语言中嵌套结构体的实现

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

2024年11月04日 Golang 我要评论
在 go 语言中,嵌套结构体是指在一个结构体内部定义另一个结构体。例如:type innerstruct struct { field1 int field2 string}type ou

在 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语言 嵌套结构体内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com