Golang-结构缺少表达错误

问题描述

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会发出“缺少表达式” 的声音,并且编译器在此行中表示“复合文字中的类型丢失”。我做错了什么?也许我应该使用其他东西代替struct?请帮忙。

解决方法

您正在将Data定义为内联结构。在为其分配值时,必须首先放入内联声明:

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

因此,最好像Data一样为User定义一个单独的类型。

,

Dataanonymous 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的结构是最干净的。