很抱歉,标题太奇怪了,这超出了我的理解能力。
我正在使用一个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)以支持传递任意的组件映射和相关状态?
答案 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)
}