Map golang地图比较:部分匹配
我希望将收到的HTTP请求头与作为结构的一部分存储的预期头的映射进行比较:Map golang地图比较:部分匹配,map,go,comparison,Map,Go,Comparison,我希望将收到的HTTP请求头与作为结构的一部分存储的预期头的映射进行比较: type Request struct { URI string Method string Headers map[string]interface{} } 我需要确保结构中定义的头存在于传入请求中。我不在乎是否有我不期望的额外头,但是存储在结构中的所有头都必须存在 是否存在确定地图中所有项目是否存在于其他地图中的golang约定?一些示例数据: { "expected_header
type Request struct {
URI string
Method string
Headers map[string]interface{}
}
我需要确保结构中定义的头存在于传入请求中。我不在乎是否有我不期望的额外头,但是存储在结构中的所有头都必须存在
是否存在确定地图中所有项目是否存在于其他地图中的golang约定?一些示例数据:
{
"expected_headers": {
"Content-Type": ["application/json"],
"Accept-Encoding": ["gzip, deflate"]
},
"received_headers": {
"Content-Type": ["application/json"],
"Accept-Encoding": ["gzip, deflate"],
"Accept": ["application/json"]
}
这是一个积极的例子:即,测试接收到的报头中是否存在预期的报头的结果应该是真的
我知道我可以在预期的_头集合上循环,并在收到的_头中查找每一个。然而,我希望有一个更优雅的方式来完成同样的事情
根据这些评论,我添加了我的解决方案。我坦率地承认我是一个全新的人,尽管我已经用许多不同的语言编写代码几十年了。我的解决方案在我看来并不优雅。欢迎提供更好的解决方案
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
}
是否存在确定地图中所有项目是否存在于其他地图中的golang约定
不,没有。您必须一次循环并检查一个
是否存在确定地图中所有项目是否存在于其他地图中的golang约定
不,没有。您必须一次循环并检查一个。循环中有什么不优雅?“循环是不是现在CS中的坏习惯?”沃尔克用他们奇特的非循环方式诅咒他们,诅咒他们。沃尔克和@OneOfOne:我把我的解决方案添加到了我原来的问题中。虽然可能有更好的方法将其编码到Go中,但我最终得到的结果在我看来并不优雅。但也许我在电池和语言上花了太多时间…@user3408000开玩笑,这是惯用的方法,其他任何东西都只是合成糖在做同样的事情。谢谢!好吧,你知道什么。。。我在正确的轨道上什么是不优雅的循环?“循环是不是现在CS中的坏习惯?”沃尔克用他们奇特的非循环方式诅咒他们,诅咒他们。沃尔克和@OneOfOne:我把我的解决方案添加到了我原来的问题中。虽然可能有更好的方法将其编码到Go中,但我最终得到的结果在我看来并不优雅。但也许我在电池和语言上花了太多时间…@user3408000开玩笑,这是惯用的方法,其他任何东西都只是合成糖在做同样的事情。谢谢!好吧,你知道什么。。。我在正确的轨道上