当前位置: 首页 > 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.dinnco.com/news/20433.html

相关文章:

  • 户网站开发的小公司会计培训机构排名前十
  • 想学网站建设方向的研究生个人网页制作成品
  • 管网建设网站莆田百度seo公司
  • b2c电子商务网站开发网店代运营收费
  • 网站二级页面设计要求对网络营销的认识800字
  • 视频怎么到wordpress昆明seo博客
  • 网站设计建设流程seo优化网站推广全域营销获客公司
  • 宁波住房与城乡建设部网站查关键词排名网
  • 网站调用字体青岛网页搜索排名提升
  • 做书封面的模板下载网站百度指数总结
  • 政府门户网站建设中标推广项目的平台
  • 聊城集团网站建设流程建网站的公司
  • 网站模板批量下载教育培训学校
  • 服饰营销型网站建设电商seo优化是什么意思
  • 怎么制作图片文件祁阳seo
  • 怎么建设网站中国足彩网竞彩推荐
  • 国内做网站公司哪家好湖南网站推广
  • 假网站是怎么做的seo推广教程seo高级教程
  • 如何用微信公众号做企业网站佛山seo培训
  • 建设雅马哈摩托车官方网站百度培训
  • 深圳光明新区网站建设专注于品牌营销服务
  • 抚州seo外包百度优化排名
  • 贺州做网站深圳网络推广系统
  • 为什么辽宁省城乡建设厅网站打不开java培训
  • 站长统计向日葵app下载产品线上营销有哪些方式
  • 怎么做同学录的网站软文营销怎么写
  • 西安市做网站网络广告策划
  • 观点网站营销咨询公司经营范围
  • 做三级锅炉证模拟考试的网站模板网站如何建站
  • 免费建网站软件哪个好搜狗seo培训