Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > Go匿名嵌套和类型嵌套

Go语言中匿名嵌套和类型嵌套的区别解析

投稿:mrr

在Go语言中,匿名嵌套结构体和与类型同名的嵌套结构体不是完全等价的,它们有一些重要的区别,这篇文章主要介绍了Go语言中匿名嵌套和类型嵌套的区别,需要的朋友可以参考下

在Go语言中,匿名嵌套结构体和与类型同名的嵌套结构体不是完全等价的,它们有一些重要的区别。以下是它们之间的主要区别:

1.字段访问:

2.字段重载:

以下是一个示例,说明这两种情况的区别:

package main
import "fmt"
type InnerStruct struct {
    Field1 int
}
type OuterStruct1 struct {
    InnerStruct // 匿名嵌套
    Field2     int
}
type OuterStruct2 struct {
    InnerStruct InnerStruct // 与类型同名的嵌套
    Field2      int
}
func main() {
    obj1 := OuterStruct1{
        InnerStruct: InnerStruct{Field1: 100},
        Field2:      200,
    }
    obj2 := OuterStruct2{
        InnerStruct: InnerStruct{Field1: 300},
        Field2:      400,
    }
    fmt.Println(obj1.Field1)       // 直接访问内部结构体字段,输出 100
    fmt.Println(obj2.InnerStruct.Field1) // 使用限定符访问内部结构体字段,输出 300
    // fmt.Println(obj2.InnerStruct.Field1) // error
}

总之,虽然匿名嵌套结构体和与类型同名的嵌套结构体都允许将一个结构体嵌套到另一个结构体中,但它们的字段访问和字段重载规则不同。你应该根据你的需求选择适当的方式来嵌套结构体。

到此这篇关于Go语言中匿名嵌套和类型嵌套的区别的文章就介绍到这了,更多相关Go匿名嵌套和类型嵌套内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文