下面两种自定义类型的简化示例。“问题”包含“已保存问题”,“已保存问题”包含“问题”。错误: 1. SavedQuestion 声明中的非法循环 2. 无效的递归类型 Questiontype Question struct { ID int `json:"id"` Name string `json:"name"` QueryText string `json:"query_text"` SavedQuestion SavedQuestion `json:"saved_question"`}type SavedQuestion struct { ID int `json:"id"` Index int `json:"index"` Name string `json:"name"` Packages PackageSpecList `json:"packages"` QueryText string `json:"query_text"` Question Question `json:"question"`}我正在对某些类型进行建模以使用第 3 方 API……第 3 方 API 的对象以这种方式建模。“SavedQuestion”是一个单独的类型,它基本上包含一个“问题”以及一堆关于它的其他数据,这似乎是完全正常的......我可以看到一个“问题”的循环也包含一个“SavedQuestion”.. . 但这就是 API 的作用。正如您从 json 标签中看到的那样,我只是想准确地对 API 发送的内容进行建模,以便我可以编组/解组等。我该如何进行这项工作?我可以将“SavedQuestion”中的“问题”作为指向“问题”的指针,错误就会消失......但是我不知道我是否应该或需要这样做,或者它是否真的可以作为代码还不够完整,无法运行测试...新的地鼠迷糊了...感谢您的任何意见。
1 回答
忽然笑
TA贡献1806条经验 获得超5个赞
您不能在另一个结构中递归地包含一个结构,原因很简单,即结构的大小和内存布局变得递归。的大小Question是一些数据的大小+(SavedQuestion)的大小,SavedQuestion大小是一些数据的大小+ Question...的大小
但是,如果使用指针,大小问题就解决了:
type Question struct {
ID int `json:"id"`
Name string `json:"name"`
QueryText string `json:"query_text"`
SavedQuestion *SavedQuestion `json:"saved_question"`
}
您需要确定何时引用question.SavedQuestion,它不是 nil。这对于编组/解组非常有效。当你解组时,如果 JSON 没有saved_question元素,它将为零。
- 1 回答
- 0 关注
- 110 浏览
添加回答
举报
0/150
提交
取消