我在这里相同地定义了类型,但是在编译时出现错误:
不能在分配中使用问题(类型[] struct {Question Question.MasterQuestion})作为类型[] struct {Question Problems.MasterQuestion“json:” question“”}
一世
这是我的代码:
类型文件
type QuestionnaireInternal struct {
ID string `json:"id"`
Questionnaire InternalQuestionnaire `json:"questionnaire"`
Questions []struct {
Question MasterQuestion `json:"question"`
} `json:"questions"`
}
DAL文件
qusIdxMap := make(map[string]struct{})
var questions []struct {Question questions.MasterQuestion}
for {
buf := idRows.NextBytes()
if len(buf) == 0 {
break
}
var ids []string
if de := json.Unmarshal(buf, &ids); de != nil {
return nil, de
}
for i := range ids {
if _, exists := qusIdxMap[ids[i]]; exists == false {
qusIdxMap[ids[i]] = struct{}{}
}
}
for j := range qus.Questions {
if _, exists := qusIdxMap[qus.Questions[j].Question.QuestionID]; exists {
*ERROR HERE:* **questions = append(questions, &qus.Questions[j])**
}
}
qus.Questions = questions
}
最佳答案
这两个结构实际上并不相同。
根据Go规范,字段标签会加入type identity(重点是我的):
如果两个结构类型具有相同的字段序列,并且对应的字段具有相同的名称,相同的类型,和相同的标记,则它们是相同的。来自不同软件包的未导出字段名称始终是不同的。
由于您使用的是匿名结构,因此必须向questions
var声明中添加相同的标签:
var questions []struct {Question questions.MasterQuestion `json:"question"`}
或者,您可以定义
Question
类型:type QuestionnaireInternal struct {
ID string `json:"id"`
Questionnaire InternalQuestionnaire `json:"questionnaire"`
Questions []Question `json:"questions"`
}
type Question struct {
Question MasterQuestion `json:"question"`
}
接着var questions []Question
关于go - 不允许分配相同的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62754960/