猿问

golang地图对比:部分匹配

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


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"]

}

这是一个正面的例子:即,如果接收到的标头中存在预期的标头,则测试结果应该为 True。


我知道我可以遍历所期望的头文件集并在接收的头文件中查找它们中的每一个。但是,我希望有一种更优雅的方式来完成同样的事情。


根据评论,我添加了我的解决方案。我坦率地承认,我是 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

}


jeck猫
浏览 157回答 1
1回答

函数式编程

是否有用于确定地图中的所有项目是否存在于另一个地图中的 golang 约定?不,没有。您将不得不循环并一次检查一个。
随时随地看视频慕课网APP

相关分类

Go
我要回答