go - 不允许分配相同的类型

标签 go

我在这里相同地定义了类型,但是在编译时出现错误:

不能在分配中使用问题(类型[] 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/

相关文章:

go - 在 Goland 的模块中找不到任何用法

windows - 为什么无法使用任何端口连接到 127.0.0.1 上的 http 服务绑定(bind)

GORM 模型和表函数

Golang cookie 的时间戳为空

go - 如何将一些事件更新从 http 处理程序发送到 WebSocket 处理程序

go - CookieJar 在哪里保存 cookie?

go - 打印指针变量

string - 如何将通配符 * 集成到数学验证路由中

go - 如何使用 golang 使用 "SCAN"而不是 "KEYS"从 redis 扫描键

oracle - 使用 docker 构建时出现 pkg_config_path 错误