go:指针或bool的映射作为接口的映射

  • 本文关键字:映射 接口 bool 指针 go go
  • 更新时间 :
  • 英文 :


假设我有不同类型的映射,其中包括bool和指针,并希望以单一方式将它们传递给某个函数:

type Blah struct {
name string
}
var mapBlah map[string]*Blah = make(map[string]*Blah)
var mapBool map[string]bool = make(map[string]bool)
func joinKeys(m map[string]interface{}) string {
// returns strings.Join(keys of map)
}

我似乎不能传递这些映射到这个函数(示例)。怎样才能做到这一点呢如果我遗漏了什么,为什么就做不到呢?

当你已经知道了类型,我认为切换类型会有如下好处:

package main
import (
"fmt"
"strings"
)
type Blah struct {
name string
}
var mapBlah map[string]*Blah = make(map[string]*Blah)
var mapBool map[string]bool = make(map[string]bool)
func joinKeys(m interface{}) string {
var a []string
switch v := m.(type) {
case map[string]*Blah:
for k, _ := range v {
a = append(a, k)
}
case map[string]bool:
for k, _ := range v {
a = append(a, k)
}
default:
}
return strings.Join(a, ",")
}
func main() {
mapBlah["1B"] = &Blah{name: "first"}
mapBlah["2B"] = &Blah{name: "second"}
fmt.Println(joinKeys(mapBlah))
mapBool["1Bool"] = true
fmt.Println(joinKeys(mapBool))
}

对于更动态的方式和一些性能权衡reflection是可行的。

最新更新