gpt4 book ai didi

data-structures - 了解嵌套结构

转载 作者:IT王子 更新时间:2023-10-29 01:36:21 25 4
gpt4 key购买 nike

我试图理解 go 中的嵌套结构,所以我做了一个小测试:( playground )

type A struct {
a string
}

type B struct {
A
b string
}

func main() {
b := B{A{"a val"}, "b val"}

fmt.Printf("%T -> %v\n", b, b) // B has a nested A and some values
// main.B -> {{a val} b val}

fmt.Println("b.b ->", b.b) // B's own value
// b.b -> b val

fmt.Println("b.A.a ->", b.A.a) // B's nested value
// b.a -> a val

fmt.Println("b.a ->", b.a) // B's nested value? or own value?
// b.a -> a val
}

那么最后两行如何以及为何起作用?他们是一样的吗?我应该使用哪个?

最佳答案

它们是一样的。参见 the Go Spec on selectors :

For a value x of type T or *T where T is not a pointer or interface type, x.f denotes the field or method at the shallowest depth in T where there is such an f. If there is not exactly one f with shallowest depth, the selector expression is illegal.

请注意,如果类型 B 在相同深度嵌入具有相同字段的两个类型,则这意味着 b.a 是非法的:

type A1 struct{ a string }
type A2 struct{ a string }
type B struct {
A1
A2
}

// ...
b := B{A1{"a1"}, A2{"a2"}}
fmt.Println(b.a) // Error: ambiguous selector b.a

Playground :http://play.golang.org/p/PTqm-HzBDr .

关于data-structures - 了解嵌套结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33282897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com