gpt4 book ai didi

map - golang map 比较 : partial match

转载 作者:IT王子 更新时间:2023-10-29 01:55:38 24 4
gpt4 key购买 nike

我希望将接收到的 HTTP 请求 header 与作为结构的一部分存储的预期 header 映射进行比较:

type Request struct {
URI string
Method string
Headers map[string]interface{}
}

我需要确保结构中定义的 header 存在于传入请求中。我不在乎是否有我不期望的额外 header ,但存储在结构中的所有 header 都必须存在。

是否有一个 golang 约定来确定一个 map 中的所有项目是否存在于另一个 map 中?一些示例数据:

{
"expected_headers": {
"Content-Type": ["application/json"],
"Accept-Encoding": ["gzip, deflate"]
},
"received_headers": {
"Content-Type": ["application/json"],
"Accept-Encoding": ["gzip, deflate"],
"Accept": ["application/json"]
}

这是一个正面的例子:即测试接收到的 header 中是否存在预期 header 的结果应该是 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
}

最佳答案

Is there a golang convention for determining whether all items in a map exist in another map?

不,没有。您将不得不循环并一次检查一个。

关于map - golang map 比较 : partial match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25670712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com