美文网首页
接口作为闭包函数参数

接口作为闭包函数参数

作者: bocsoft | 来源:发表于2018-11-12 16:08 被阅读0次
    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]
         */
    }
    
    
    
    

    相关文章

      网友评论

          本文标题:接口作为闭包函数参数

          本文链接:https://www.haomeiwen.com/subject/bzscfqtx.html