doudilin1225 2018-07-31 22:02
浏览 43
已采纳

map [string]字符串

Apologies for the title, but this is a weird one and out of my ability to understand.

I'm working with a go library that's sort of finished, but sort of not:

https://github.com/yfronto/go-statuspage-api

The statuspage.io API supports the following params when posting an incident:

incident[components][component_id] - Map of status changes to apply to affected components.

An example would be:

"incident[components][ftgks51sfs2d]=degraded_performance"

Unfortunately, the struct defined in the library doesn't support that particular field:

type NewIncidentUpdate struct {
    Name               string
    Status             string
    Message            string
    WantsTwitterUpdate bool
    ImpactOverride     string
    ComponentIDs       []string
}

func (i *NewIncidentUpdate) String() string {
    return encodeParams(map[string]interface{}{
        "incident[name]":                 i.Name,
        "incident[status]":               i.Status,
        "incident[message]":              i.Message,
        "incident[wants_twitter_update]": i.WantsTwitterUpdate,
        "incident[impact_override]":      i.ImpactOverride,
        "incident[component_ids]":        i.ComponentIDs,
    })
}

How can I update this struct (and the associated encodeParams function) to support passing an arbitrary map of components and associated statuses?

  • 写回答

1条回答 默认 最新

  • duangu4980 2018-07-31 22:24
    关注

    You could embed a NewIncidentUpdate inside your own struct that defines the component status changes.

    type MyIncidentUpdate struct {
        NewIncidentUpdate
        ComponentStatusChanges map[string]string
    }
    

    then define String the same way, while accomodating for your ComponentStatusChanges map.

    func (i *MyIncidentUpdate) String() string {
        params := map[string]interface{}{
            "incident[name]":                 i.Name,
            "incident[status]":               i.Status,
            "incident[message]":              i.Message,
            "incident[wants_twitter_update]": i.WantsTwitterUpdate,
            "incident[impact_override]":      i.ImpactOverride,
            "incident[component_ids]":        i.ComponentIDs,
        }
        for k, val := range i.ComponentStatusChanges {
            key := fmt.Sprintf("incident[components][%s]", k)
            params[key] = val
        }
    
        return encodeParams(params)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么