当前位置: 首页 > news >正文

中国有哪些软件公司/培训seo哪家学校好

中国有哪些软件公司,培训seo哪家学校好,网站后台登陆路径,建筑公司取名字参考大全最近做一个需求,各种业务消息都会往我的消息队列中写各种类型的数据,服务端需要接受各种不同的参数然后转换为本地数据结构,Go语言不确定上游传过来的数值是什么类型,然后又下面四种解决方案。 1. 类型断言和类型切换 func (Mis…

最近做一个需求,各种业务消息都会往我的消息队列中写各种类型的数据,服务端需要接受各种不同的参数然后转换为本地数据结构,Go语言不确定上游传过来的数值是什么类型,然后又下面四种解决方案。

1. 类型断言和类型切换

func (MissionEventHandler) Handle(ctx context.Context, message *kafka.Message) error {var raw map[string]interface{}err := json.Unmarshal(message.Value, &raw)if err != nil {// Handle errorreturn err}switch raw["event"] {case mission.MISSION_EVENT_PAY_SUCCESS:uid, ok1 := raw["uid"].(string)time, ok2 := raw["time"].(string)num, ok3 := raw["num"].(float64) // JSON numbers are float64 by defaultif !ok1 || !ok2 || !ok3 {// Handle type assertion errorreturn errors.New("type assertion failed")}// Handle the event// ...// Add cases for other event typesdefault:// Handle unknown event}return nil
}

2. 结构体组合

type Event struct {Event string `json:"event"`
}type PaySuccessEvent struct {EventUID  string `json:"uid"`Time string `json:"time"`Num  int    `json:"num"`
}// ... Define other specific event structsfunc (MissionEventHandler) Handle(ctx context.Context, message *kafka.Message) error {var baseEvent Eventerr := json.Unmarshal(message.Value, &baseEvent)if err != nil {// Handle errorreturn err}switch baseEvent.Event {case mission.MISSION_EVENT_PAY_SUCCESS:var paySuccessEvent PaySuccessEventerr := json.Unmarshal(message.Value, &paySuccessEvent)if err != nil {// Handle errorreturn err}// Handle the event// ...// Add cases for other event typesdefault:// Handle unknown event}return nil
}

3. 使用 json.RawMessage

type GenericEvent struct {Event string          `json:"event"`Data  json.RawMessage `json:"data"`
}func (MissionEventHandler) Handle(ctx context.Context, message *kafka.Message) error {var genericEvent GenericEventerr := json.Unmarshal(message.Value, &genericEvent)if err != nil {// Handle errorreturn err}switch genericEvent.Event {case mission.MISSION_EVENT_PAY_SUCCESS:var paySuccessEvent PaySuccessEventerr := json.Unmarshal(genericEvent.Data, &paySuccessEvent)if err != nil {// Handle errorreturn err}// Handle the event// ...// Add cases for other event typesdefault:// Handle unknown event}return nil
}

4. 使用 map[string]interface{} 和反射

import ("reflect""encoding/json"
)func (MissionEventHandler) Handle(ctx context.Context, message *kafka.Message) error {var raw map[string]interface{}err := json.Unmarshal(message.Value, &raw)if err != nil {// Handle errorreturn err}switch raw["event"] {case mission.MISSION_EVENT_PAY_SUCCESS:paySuccessEvent := reflect.New(reflect.TypeOf(PaySuccessEvent{})).Interface()err := mapstructure.Decode(raw, &paySuccessEvent)if err != nil {// Handle errorreturn err}// Handle the event// ...// Add cases for other event typesdefault:// Handle unknown event}return nil
}

在第四种方法中,使用了mapstructure库,可以将通用的map值解码到相应的结构体中。

http://www.rdtb.cn/news/165.html

相关文章:

  • 国家卫生资格考试官网/班级优化大师的功能有哪些
  • 怎麽用dw做网站轮播海报/百度提交入口网址是什么
  • 网站绝对路径/合肥seo整站优化
  • 做直播 网站的上市公司/网站流量排名查询工具
  • 网站规划设计书/网络营销策划书的主要内容
  • 如果做网站/广州:推动优化防控措施落
  • 企业网络营销策略研究/aso优化报价
  • 网站建设状况/百度导航和百度地图
  • 做网站的公司哪里好/游戏交易平台
  • 做网站好看的旅行背景图片/台州seo公司
  • 海商网做网站价格/百度seo推广计划类型包括
  • 沈阳有做网站的吗/网络营销企业培训
  • 本网站建设/常见的网络营销策略都有哪些
  • 利用图床做网站/灰色推广引流联系方式
  • 石景山网站建设服务/网站排名查询平台
  • 上海做网站最好的公司/seo在线论坛
  • 做网站为什么要用php框架/php视频转码
  • html可以做网站吗/推广下载app赚钱
  • 网站设计毕业论文的模板咋写/市场营销案例分析
  • 正能量网站网址大全/深圳网页搜索排名提升
  • 桂林网站建设费用/做百度推广销售怎么样
  • 不同类型企业网站的对比分析/网推获客平台
  • 怎么用新浪云做网站/百度优化怎么做
  • 网站建设需求表/重庆百度关键词优化软件
  • 网页翻译网站/优化排名推广教程网站
  • 海珠建网站多少钱/河南网站顾问
  • 网站做子域名/策划
  • 网站设计开发文档模板/网络推广平台都有哪些
  • 深圳网站设计师/湖南网络推广公司大全
  • 小而美企业网站建设/人民日报官网