gpt4 book ai didi

go - Golang中如何访问list.Element.Value自身的属性?

转载 作者:IT王子 更新时间:2023-10-29 01:55:47 26 4
gpt4 key购买 nike

使用container/list,很容易让对象管理列出的元素,并按顺序访问每个元素。

但似乎每个 element.Value 都不允许访问它自己的派生自用户定义类型的属性,因为 element.Value 的类型是 interface{}

for p := members.Front(); p != nil; p = p.Next() {
fmt.Printf("This is Person -> %+v\n", p.Value)
fmt.Printf("This is also `Person` -> %T\n\n", p.Value)
// fmt.Printf("But cannnot access Person.Name %s\n", p.Value.Name)
}

(此处的完整代码:http://play.golang.org/p/AMWqdPymHq)

如何访问 element.Value 自身的属性,或者在构造列表对象时应用类型?

最佳答案

如果您知道该列表包含 Person 值,您可以使用类型断言从 interface{} 变量中检索该值:

person := p.Value.(Person)

您现在可以完全访问该值并可以访问其字段。请注意,person 是存储在 p.Value 中的值的副本,因此修改 person 不会修改列表中的值项。您可以通过 (a) 将修改后的 person 分配回 p.Value 或 (b) 将 *Person 指针存储在列表。

如果列表项不包含 Person 值,上面的代码将会崩溃。如果您知道列表将始终包含该类型的值,那很好。否则,您可以使用两个返回类型断言语法:

person, ok := p.Value.(Person)

如果类型不匹配,它会将 ok 设置为 false。对于更复杂的情况,您还可以使用 type switch .

关于go - Golang中如何访问list.Element.Value自身的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23004515/

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