假设有一个结构体来表示用户信息:
1 | type User struct { |
然后有个需求是展示给用户的名称要根据用户的性别
和VIP
来生成,比如说:
- 如果用户是 VIP,那么展示
尊贵的 + 名字 + 先生/女士
- 如果用户不是 VIP,那么展示
名字 + 先生/女士
这个时候一般会有个做法,在结构体中加一个字段:
1 | type User struct { |
然后在每次更新Name
、Sex
、Vip
的时候调用SetDisplayName
方法来更新DisplayName
字段,或者在序列化的时候调用SetDisplayName
方法来更新DisplayName
字段,这样做是没问题的,但是非常的不利于维护,要到处硬编码调用SetDisplayName
方法,非常容易遗漏,那么有没有什么优雅的方式来解决这个问题呢?答案是有的,下面来介绍一下。
方法作为字段转JSON
golang
在做JSON序列化的时候,会调用结构体的MarshalJSON
方法,可以利用这个特性来解决这个问题,也就是自定义序列化实现,在每次序列化的时候动态计算DisplayName
字段。
1 | // 实现一个方法来返回 DisplayName 字段 |
这样就可以在序列化的时候动态计算DisplayName
字段了。
当然上面的示例只是抛砖引玉,可以根据实际业务来使用,比如说直接交给前端来处理DisplayName
字段逻辑,本文主要是记录一下golang
中方法作为字段转JSON的方法。