map [string]字符串

时间:2018-07-31 22:02:55

标签: go

很抱歉,标题太奇怪了,这超出了我的理解能力。

我正在使用一个Go库,它已经完成了,但是还没有:

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

发布事件时,statuspage.io API支持以下参数:

"incident[components][ftgks51sfs2d]=degraded_performance"

一个例子是:

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,
    })
}

不幸的是,在库doesn't support that particular field中定义的结构:

func_name

如何更新此结构(和the associated encodeParams function)以支持传递任意的组件映射和相关状态?

1 个答案:

答案 0 :(得分:1)

您可以在自己的结构中嵌入NewIncidentUpdate,以定义组件状态更改。

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

然后以相同的方式定义String,同时容纳您的ComponentStatusChanges地图。

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)
}