Go 映射键的惯用else if链

Go 映射键的惯用else if链,go,Go,我有一个相当长的else if链,在地图中查找关键点,并在找到时设置一个特定值。我选择用最少的代码来实现它的方式是这样的(m是一个map[string]接口{}) 这感觉有点笨重,我正在做所有这些,如果,在条件中设置一个变量。有没有一种惯用的方法可以做到这一点?我认为这种方式并不能让我立即明白我想做什么。例如 package main import "fmt" func findValue(m map[string]interface{}, keys []string) (interface

我有一个相当长的else if链,在地图中查找关键点,并在找到时设置一个特定值。我选择用最少的代码来实现它的方式是这样的(
m
是一个
map[string]接口{}

这感觉有点笨重,我正在做所有这些
,如果
,在条件中设置一个变量。有没有一种惯用的方法可以做到这一点?我认为这种方式并不能让我立即明白我想做什么。

例如

package main

import "fmt"

func findValue(m map[string]interface{}, keys []string) (interface{}, bool) {
    for _, key := range keys {
        if value, ok := m[key]; ok {
            return value, true
        }
    }
    return nil, false
}

func main() {
    m := map[string]interface{}{"keyn": "valuen"}
    keys := []string{"key1", "key2", "keyn"}
    s, found := findValue(m, keys)
    if !found {
        return
    }
    id := s.(string)
    fmt.Println(id)
}
输出:

valuen
比如说,

package main

import "fmt"

func findValue(m map[string]interface{}, keys []string) (interface{}, bool) {
    for _, key := range keys {
        if value, ok := m[key]; ok {
            return value, true
        }
    }
    return nil, false
}

func main() {
    m := map[string]interface{}{"keyn": "valuen"}
    keys := []string{"key1", "key2", "keyn"}
    s, found := findValue(m, keys)
    if !found {
        return
    }
    id := s.(string)
    fmt.Println(id)
}
输出:

valuen
比如说,

package main

import "fmt"

func findValue(m map[string]interface{}, keys []string) (interface{}, bool) {
    for _, key := range keys {
        if value, ok := m[key]; ok {
            return value, true
        }
    }
    return nil, false
}

func main() {
    m := map[string]interface{}{"keyn": "valuen"}
    keys := []string{"key1", "key2", "keyn"}
    s, found := findValue(m, keys)
    if !found {
        return
    }
    id := s.(string)
    fmt.Println(id)
}
输出:

valuen
比如说,

package main

import "fmt"

func findValue(m map[string]interface{}, keys []string) (interface{}, bool) {
    for _, key := range keys {
        if value, ok := m[key]; ok {
            return value, true
        }
    }
    return nil, false
}

func main() {
    m := map[string]interface{}{"keyn": "valuen"}
    keys := []string{"key1", "key2", "keyn"}
    s, found := findValue(m, keys)
    if !found {
        return
    }
    id := s.(string)
    fmt.Println(id)
}
输出:

valuen

实际上,我认为您提供的代码非常容易阅读和理解。这有点冗长,但没有魔力;)。因此,如果只有一个地方需要编写代码,我会保持原样。如果你需要写几次,我会考虑写另一个评论中提到的代码<代码>发现值> />代码>

实际上我认为你提供的代码非常容易阅读和理解。这有点冗长,但没有魔力;)。因此,如果只有一个地方需要编写代码,我会保持原样。如果你需要写几次,我会考虑写另一个评论中提到的代码<代码>发现值> />代码>

实际上我认为你提供的代码非常容易阅读和理解。这有点冗长,但没有魔力;)。因此,如果只有一个地方需要编写代码,我会保持原样。如果你需要写几次,我会考虑写另一个评论中提到的代码<代码>发现值> />代码>

实际上我认为你提供的代码非常容易阅读和理解。这有点冗长,但没有魔力;)。因此,如果只有一个地方需要编写代码,我会保持原样。如果你需要写几次,我会考虑写另一个评论中提到的代码<代码>发现值> /代码>。

我也在考虑这个精确的解决方案。看起来更具可读性。也可以使
findValue(m map[string]interface{},keys…string)
我也在考虑这个精确的解决方案。看起来更具可读性。也可以使
findValue(m map[string]interface{},keys…string)
我也在考虑这个精确的解决方案。看起来更具可读性。也可以使
findValue(m map[string]interface{},keys…string)
我也在考虑这个精确的解决方案。看起来更具可读性。还可以使
findValue(m map[string]interface{},keys…string)
这就是我没有编写findValue函数的原因。另外,我相信使用
:=
不会起作用,因为当您这样做时,变量的作用域仅限于if语句,这就是我没有编写findValue函数的原因。另外,我相信使用
:=
不会起作用,因为当您这样做时,变量的作用域仅限于if语句,这就是我没有编写findValue函数的原因。另外,我相信使用
:=
不会起作用,因为当您这样做时,变量的作用域仅限于if语句,这就是我没有编写findValue函数的原因。另外,我相信使用
:=
不会起作用,因为当您这样做时,变量的作用域仅限于if语句