go - go:指针或布尔映射作为接口映射
问题描述
假设我有不同类型的映射,其中包括布尔值和指针,并希望以单一方式将它们传递给某个函数:
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
是要走的路。
推荐阅读
- sql-server - 与 sum 和小于的内连接
- javascript - 如何将 URL 的第一部分设置为 HTML 链接中的 JavaScript 变量
- python - 如何让我的子文件在主文件中使用我的定义?
- mongodb - 在 MongoDB 上按字段值聚合
- git - Git,将分支设置为不可合并
- amazon-web-services - DynamoDB - 使用 PITR 为 CloudFormation 管理的 DynamoDB 表恢复表
- node.js - 无法使用 Docker-compose 使用 Nodejs 连接到 mongoDB
- php - Symfony 3.4 使用没有捆绑的 RESTful API 插入数据
- c# - 版本不兼容 Microsoft.Graph
- c# - 关于 scriptableObject 的困惑