惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
U
Unit 42
MyScale Blog
MyScale Blog
B
Blog
阮一峰的网络日志
阮一峰的网络日志
量子位
IT之家
IT之家
The GitHub Blog
The GitHub Blog
F
Fortinet All Blogs
Recent Announcements
Recent Announcements
V
Visual Studio Blog
G
Google Developers Blog
Last Week in AI
Last Week in AI
雷峰网
雷峰网
博客园 - 聂微东
博客园 - 叶小钗
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
博客园 - 司徒正美
Y
Y Combinator Blog
T
The Blog of Author Tim Ferriss
月光博客
月光博客
aimingoo的专栏
aimingoo的专栏

博客园 - 川川籽

GO面试题:new 和 map 的区别 minikube dashboard ImagePullBackOff 失败问题的解决方法 hashicorp/raft模块实现的raft集群存在节点跨集群身份冲突问题 macos 13安装openvpn - 川川籽 [转发] Go pprof内存指标含义备忘录 自己搭建一个https的dns,让不同的浏览器使用不同的DNS,使用相同的域名访问到不同的主机上 记一次docker buildx build 推送到本地私有仓库出现 connection refused 的问题 Linux C 获取本机IPV4和IPV6地址列表 Mac M1 安装python3.6.x MacOS M1 安装python3.5 使用php的openssl_encrypt和python的pycrypt进行跨语言的对称加密和解密问题 golang random string 【转载】coroutine 与 goroutine 区别 python简单的time ticker 'invalid flag in #cgo LDFLAGS: -w' 问题解决 记录一次python的mysqlclient依赖库报错问题 airflow当触发具有多层subDAG的任务的时候,出现[Duplicate entry ‘xxxx’ for key dag_id]的错误的问题处理 Python3并发写文件 python hash 每次调用结果不一样
golang map 和 interface 的一些记录
川川籽 · 2022-09-27 · via 博客园 - 川川籽
  • golangmap读取是不需要判断key是否存在的,不存在的key会返回默认值。
  • 如果map的value是interface,那么interface是需要先进行类型转换的,非要求类型的转换,得到结果是nil
package main

import "fmt"

var m map[string]interface{}

func getStr(k string) string {
	v, ok := m[k].(string)
	if ok {
		return v
	} else {
		return "Null"
	}
}

func getNum(k string) int {
	v, ok := m[k].(int)
	if ok {
		return v
	} else {
		return 0
	}
}

func getFunc(k string) string {
	v, ok := m[k].(func(name string, age int) string)
	if ok {
		return v(getStr("name"), getNum("age"))
	} else {
		return "unknow"
	}

	//v, _ := m[k].(func(name string, age int) string)
	//return v("a", 12)
}

func main() {
	fmt.Println("Hello, 世界")
	m = map[string]interface{}{
		"name":      "zhangsan",
		"age":       12,
		"is_female": false,
		"hi": func(name string, age int) string {
			return fmt.Sprintf("hello, my name is %s, i'm %d year old.", name, age)
		},
	}
	fmt.Println(getStr("name"))
	fmt.Println(getStr("age"))
	fmt.Println(getStr("hi"))
	fmt.Println(getNum("age"))
	fmt.Println(getFunc("age"))
	fmt.Println(getFunc("sayhi"))
	fmt.Println(getFunc("hi"))
}