Go 映射键的惯用else if链
我有一个相当长的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
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语句