Map里装填func
package main
import "fmt"
func f(p string) {
fmt.Println("function f parameter:", p)
}
func g(p string, q int) {
fmt.Println("function g parameters:", p, q)
}
func main() {
m := map[string]interface{}{
"f": f,
"g": g,
}
for k, v := range m {
switch k {
case "f":
v.(func(string))("astring")
case "g":
v.(func(string, int))("astring", 42)
}
}
}
Test框架
go test -v converts_test.go converts.go -run TestTrimBuffToString
结果:
=== RUN TestTrimBuffToString
--- PASS: TestTrimBuffToString (0.00s)
converts_test.go:86: json: ["hello","world"]
PASS
ok command-line-arguments 0.006s
Interface
原文:https://blog.csdn.net/ghost_leader/article/details/77126918
接口是一个或多个方法签名的集合
只要某个类型拥有该接口的所有方法签名,就算实现了该接口,无需显示声明实现了哪个接口,这称之为 Structural Typing
3. 接口只有方法声明,没有实现,没有数据结构字段
- 接口可以匿名嵌入其他接口,或者嵌入到接口中
5. 将对象复制给接口,会发生拷贝,而接口内部存储的是指向这个复制品的指针,即无法修改复制品的状态,也无法获取指针
接口调用不会做receiver的自动转换
接口也可以实现类似OOP中的多态
8. 空接口可以作为任何类型数据的容器