golang map 和 interface 的一些记录
golang的map读取是不需要判断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"))
}
golang map 和 interface 的一些记录的更多相关文章
- golang map 读写锁与深度拷贝的坑
0X01 golang中,map(字典)无法并发读写 简单来说,新建万条线程对同一个map又读又写,会报错. 为此,最好加锁,其实性能影响并不明显. type taskCache struct{ sy ...
- 【荐】详解 golang 中的 interface 和 nil
golang 的 nil 在概念上和其它语言的 null.None.nil.NULL一样,都指代零值或空值.nil 是预先说明的标识符,也即通常意义上的关键字.在 golang 中,nil 只能赋值给 ...
- 【GoLang】GoLang map 非线程安全 & 并发度写优化
Catena (时序存储引擎)中有一个函数的实现备受争议,它从 map 中根据指定的 name 获取一个 metricSource.每一次插入操作都会至少调用一次这个函数,现实场景中该函数调用更是频繁 ...
- golang map输出排序
由于GoLang Map 内部存储是无序的,当需要按顺序获得map存储的key -value值时,应该对遍历出来的结果进行重新排序: 在go 1.8版本后,提供的slice sort 功能使排序更简单 ...
- is not valid JSON: json: cannot unmarshal string into Go value of type map[string]interface | mongodb在windows和Linux导出出错
执行mongoexport命令的时候 mongoexport --csv -f externalSeqNum,paymentId --host 127.0.0.1:27017 -d liveX -c ...
- go语言解析 map[string]interface{} 数据格式
原文:https://blog.csdn.net/Nick_666/article/details/79801914 map记得分配内存 解析出来的int类型会变成float64类型 注意判断不为ni ...
- 【方法1】删除Map中Value反复的记录,而且仅仅保留Key最小的那条记录
介绍 晚上无聊的时候,我做了一个測试题,測试题的大体意思是:删除Map中Value反复的记录,而且仅仅保留Key最小的那条记录. 比如: I have a map with duplicate val ...
- golang map to struct
http://stackoverflow.com/questions/26744873/converting-map-to-struct func SetField(obj interface{}, ...
- golang学习笔记 ---interface
1. 什么是interface接口 interface 是GO语言的基础特性之一.可以理解为一种类型的规范或者约定.它跟java,C# 不太一样,不需要显示说明实现了某个接口,它没有继承或子类或“im ...
- 【转】GO语言map类型interface{}转换踩坑小记
原文:https://www.az1314.cn/art/69 ------------------------------------------ mapA := make([string]inte ...
随机推荐
- C++基础练习案例 - 模拟时钟系统 [DOS]
大学时期初学C++,做了些案例练习,想着整理一下,供自己和网友翻阅参考,谢谢支持!有个[模拟时钟系统]做的还可以. [PS]存在一些小问题,如编写习惯等,文末有简单小结,请自行辨析.算是提供不良模板, ...
- 面试题55 - II. 平衡二叉树
地址:https://leetcode-cn.com/problems/ping-heng-er-cha-shu-lcof/ <?php /** 输入一棵二叉树的根节点,判断该树是不是平衡二叉树 ...
- 【MIPS】经典指令块集锦
Directives声明变量值存储 容易将数据段地址和地址上的内容搞混 .data fibs: .space 48 # allocate 12 * 4 = 48 Byte memory, store ...
- linux shell用expect实现在scp时自动输入密码
文章目录 linux shell用expect自动输入密码 按行读取文件 expect 其他 linux shell用expect自动输入密码 最近有东西需要部署到很多服务器上去,一个服务器一个服务器 ...
- Jupyter Notebook的所有文件ipynb保存下来
前言 如果你想要保存整个 Jupyter Notebook 工作目录,包括所有笔记本和其他相关文件,最直接的方法是将整个文件夹压缩为一个 ZIP 或 TAR 文件. 下载单个文件 压缩文件夹下载 在 ...
- gin Http请求Body和Header的获取 request post form Query header
gin Http请求Body和Header的获取 request post form Query header 请求参数 POST /post?id=1234&page=1 HTTP/1.1 ...
- Java基于XXLJOB的定时任务实现阶梯式通知方式
数据库表设计 CREATE TABLE `tx_order_push_info` ( `order_no` varchar(64) DEFAULT NULL COMMENT '交易单号', `orde ...
- JdbcTemplate 自定义返回的结果集字段和实体类映射
废话不多:抄袭代码 package com.webank.wedatasphere.qualitis.handler; import com.webank.wedatasphere.qualitis. ...
- Linux环境 Oracle 监听和服务 日常操作
文章目录 一.Oracle监听 1.1. 查看Oracle监听运行状态 1.2. 启动 ...
- Url base64加密
class UrlEncryption { /** * base64编码 * * @param string * @return string */ public static function en ...