首页 > 解决方案 > 复合文字在引用类型时使用非键字段,但在定义包时不使用

问题描述

我有两个包,dbservice. 在db中,我接受由 protobuf 创建的类型并将其包装为另一种类型,如下所示:

type BatchStatus struct {
    gopb.BatchInvoiceStatus
}

当我想创建这些对象之一时,我可以这样做:

status := BatchStatus{
    gopb.BatchInvoiceStatus{
        Id:            makeBatchStatusID(mspID, period),
        SortKey:       makeBatchStatusSortKey(mspID, uuid),
        InvoiceStatus: Preparing,
        InvoiceType:   batchType,
        Start:         start,
        Count:         0,
    },
}

正如我所料,这不会出现错误。但是,如果我尝试在services包中做同样的事情:

status := &db.BatchStatus{
    gopb.BatchInvoiceStatus{
        Id:            makeBatchStatusID(mspID, period),
        SortKey:       makeBatchStatusSortKey(mspID, uuid),
        InvoiceStatus: Preparing,
        InvoiceType:   batchType,
        Start:         start,
        Count:         0,
    },
}

我收到一条警告说db.BatchStatus composite literal uses unkeyed fields。为什么在BatchStatus定义的包中不会出现此警告,但在包外引用时会出现?

标签: go

解决方案


推荐阅读