2017-05-25 76 views
0

在我的web服务,我有一个模型:如何在Golang中响应所有字段包含标记为omitempty的字段?

// Comment struct 
type Comment struct { 
    Owner   UserObject  `json:"owner"` 
    ID    int64   `json:"id"` 
    Message   string   `json:"message"` 
    Mentions   []MentionObject `json:"mentions,omitempty"` 
    CreatedAt  int64   `json:"created_at,omitempty"` 
    UpdatedAt  int64   `json:"updated_at,omitempty"` 
    Status   int    `json:"status,omitempty"` 
    CanEdit   bool   `json:"can_edit"` 
    CanDelete  bool   `json:"can_delete"` 
} 


// UserObject struct 
type UserObject struct { 
    ID  int64 `json:"id"` 
    Username string `json:"username"` 
    FullName string `json:"full_name"` 
    Avatar string `json:"avatar"` 
} 

// MentionObject struct 
type MentionObject struct { 
    ID  int64 `json:"id"` 
    Length int64 `json:"length"` 
    Offset int64 `json:"offset"` 
} 

我用杜松子酒gonic路由

routes.GET("/user", func(c *gin.Context) { 
     c.JSON(200, Comment{}) 
    }) 

我需要回到这个结构的各个领域,我知道,这将响应JSON :

{ 
    "owner": { 
    "id": 0, 
    "username": "", 
    "full_name": "", 
    "avatar": "" 
    }, 
    "id": 0, 
    "message": "", 
    "can_report": false, 
    "can_edit": false, 
    "can_delete": false 
} 

我知道这是对的,但我仍然希望全部回应。 如何做到这一点?

回答

3

如果您不希望从标记中删除omitempty值,因为您需要将其用于其他目的,则可以使用Go 1.8或更高版本定义与您想要的相同的新type以序列化但没有omitempty标记值,然后将值从旧类型转换为新类型。

Here's an example of the 1.8+ "tag ignoring" type conversion

你也可以定义一个新的类型与那些在原来的省略,然后嵌入领域原来在新型like so

相关问题