我有这样的结构
type Item struct {
Data []struct {
meta struct {
ID int
}
}
}
func main () {
_, value := range Item.Data {
getId(value)
}
}
func getId(v Item.Data) {
return v.ID
}
在getId()
函数中,如何键入值为Item.Data
struct的提示?或者正确地将Item.Data
传递给getId
?
我创建了一个经过修改的简单示例。
答案 0 :(得分:2)
快速笔记:
for
_, value := range Item.Data
遍历一个类型,而不是一个不起作用的实例。嵌套结构定义是IMHO仅对一种关闭类型有用。例如,如果要将数据从JSON序列化为Go,则转换时可能需要一些临时结构。
如果您要定义要在整个程序中使用的类型,则应分别定义每个类型。这使得扩展和使用这些类型变得更加容易。
如果每个类型都是自己定义的,那么很容易在data
类型上添加一个返回id
字段的meta
的方法。
为了使一切显而易见,我将事物命名为...Type
和...Field
,您不需要这样做,这不是一个好习惯;)
func (d dataType) getId() int {
return d.metaField.idField
}
完整示例:
package main
import (
"fmt"
)
type dataType struct {
metaField metaType
}
type metaType struct {
idField int
}
type itemType struct {
dataField []dataType
}
func (d dataType) getId() int {
return d.metaField.idField
}
func main() {
item := itemType{
dataField: []dataType{
dataType{
metaField: metaType{
idField: 1,
},
},
},
}
for _, value := range item.dataField {
fmt.Println(value.getId())
}
}