package main
import (
"fmt"
"reflect"
)
//定义一个接口
type Input interface {
Values() map[string]string
}
//定义一个结构体
type in struct {
values map[string]string
}
//结构体实现接口方法
func (i *in) Values() map[string]string {
return i.values
}
//定义一个函数,参数为接口
type Runnable func(i Input)
//定义一个方法,参数为函数,返回值也为函数且函数的参数为接口
func WithUser(Runnable) Runnable {
return func(i Input) {
m := i.Values()
m["user"] = "jareo"
fmt.Println("pointer inside wrapper:", reflect.ValueOf(i).Pointer())
}
}
//定义一个函数,参数为接口
func Run1(i Input) {
fmt.Println("pointer inside func:", reflect.ValueOf(i).Pointer())//此语句并未执行
}
func main() {
i := &in{map[string]string{}}
fmt.Println("pointer outside: ", reflect.ValueOf(i).Pointer())
WithUser(Run1)(i) //调用闭包
fmt.Println(i.values)
/*
输出结果:
pointer outside: 824634195992
pointer inside wrapper: 824634195992
map[user:jareo]
*/
}
网友评论