我希望将收到的HTTP请求标头与预期标头的映射进行比较,这些标头存储为结构的一部分:
type Request struct {
URI string
Method string
Headers map[string]interface{}
}
我需要确保结构中定义的Headers存在于传入请求中。我不在乎是否有额外的标题我不期待,但结构中存储的所有标题必须存在。
是否有golang约定来确定地图中的所有项目是否都存在于另一个地图中?一些示例数据:
{
"expected_headers": {
"Content-Type": ["application/json"],
"Accept-Encoding": ["gzip, deflate"]
},
"received_headers": {
"Content-Type": ["application/json"],
"Accept-Encoding": ["gzip, deflate"],
"Accept": ["application/json"]
}
这是一个积极的例子:即测试接收标头中是否存在预期标头的结果应为True。
我知道我可以循环遍历expected_headers,并在received_headers中查找每一个。但是,我希望有一种更优雅的方式来完成同样的事情。
根据评论,我添加了我的解决方案。我坦率地承认,我是Go的新手(虽然我已经用几十年的不同语言编写代码)。我的解决方案对我来说似乎并不优雅。欢迎更好的解决方案!
func contains(theSlice []string, theValue string) bool {
for _, value := range theSlice {
if value == theValue {
return true
}
}
return false
}
func slicesMatch(slice1 []string, slice2 []string) bool {
for _, value := range slice1 {
if !(contains(slice2, value)) {
return false
}
}
return true
}
func headersMatch(expected map[string][]string, actual http.Header) bool {
for key, value := range expected {
if !(slicesMatch(value, actual[key])) {
return false
}
}
return true
}
答案 0 :(得分:4)
是否有golang约定来确定地图中的所有项目是否都存在于另一个地图中?
不,没有。您将不得不循环并一次检查一个。