Golang - 结构上缺少表达式错误

Golang - Missing expression error on structs

type Old struct {
    UserID int `json:"user_ID"`
    Data   struct {
        Address string `json:"address"`
    } `json:"old_data"`
}

type New struct {
    UserID int `json:"userId"`
    Data   struct {
        Address string `json:"address"`
    } `json:"new_data"`
}

func (old Old) ToNew() New {
    return New{
        UserID: old.UserID,
        Data: { // from here it says missing expression
            Address: old.Data.Address,
        },
    }
}

什么是 “缺少表达式” 使用结构时的错误? 我正在将旧对象转换为新对象。我将它们缩小只是为了直截了当,但转换要复杂得多。例如,UserID 字段效果很好。但是当我使用 struct(它最终打算成为一个 JSON 对象)时,Goland IDE 尖叫 "missing expression" 并且编译器说"missing type在这一行上的复合文字”。我做错了什么?也许我应该使用其他东西而不是结构?请帮忙。

您将 Data 定义为内联结构。给它赋值的时候,必须先放入内联声明:

func (old Old) ToNew() New {
    return New{
        UserID: old.UserID,
        Data: struct {
        Address string `json:"address"`
    }{
            Address: old.Data.Address,
        },
    }
}

因此通常最好为 Data 定义一个单独的类型,就像 User.

Data是一个anonymous struct,所以需要这样写:

type New struct {
    UserID int `json:"userId"`
    Data   struct {
        Address string `json:"address"`
    } `json:"new_data"`
}

func (old Old) ToNew() New {
    return New{
        UserID: old.UserID,
        Data: struct {
            Address string `json:"address"`
        }{
            Address: old.Data.Address,
        },
    }
}

(playground link)

我认为创建一个命名的 Address 结构是最干净的。