问题描述
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
定义一个单独的类型。
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,}
}
我认为创建命名为Address
的结构是最干净的。