接口型函数:指的是用函数实现接口,这样在调用的时候就会非常简便,这种函数为接口型函数,这种方式适用于只有一个函数的接口。

定义一个类型,这个类型只定义了函数的参数列表,函数参数列表与接口定义的方法一致:

type HandlerFunc func(k, v interface{})

然后这个类型去实现接口,实现的函数调用自己

func (hf HandlerFunc) Do(k, v interface{}) {
hf(k, v) // 接口的实现中调用本身。这样就使得可以用函数来实现接口功能,而不是定义类型并实现接口来实现接口功能
}

这样就可以用两种方法去实现接口功能

func Each(mp map[interface{}]interface{}, h Handler) { // 传入一个实现了Handler接口的类型的实例
} func EachFunc(mp map[interface{}]interface{}, handlerFunc HandlerFunc) { // 传入了一个参数列表为接口所需实现函数的
}

第二种方式可以只传入一个函数,只要求参数列表一致,函数名字可随便起,类型也不用新定义,用起来很方便。

完整代码如下;

package main

import "fmt"

type Handler interface {
Do (k, v interface{})
} type HandlerFunc func(k, v interface{}) func (hf HandlerFunc) Do(k, v interface{}) {
hf(k, v)
} func Each(mp map[interface{}]interface{}, h Handler) {
if mp != nil && len(mp) > 0 {
for k, v := range mp {
h.Do(k, v)
}
}
} func EachFunc(mp map[interface{}]interface{}, handlerFunc HandlerFunc) {
if mp != nil && len(mp) > 0 {
for k, v := range mp {
handlerFunc(k, v)
}
}
} func selfInfo(k, v interface{}) {
fmt.Printf("my name is %s, i am %d years old", k, v)
fmt.Println()
} func main() {
mp := map[interface{}]interface{}{
"gaoziwen":26,
"zhangsan":27,
"lisi":28,
} f := selfInfo
EachFunc(mp, f)
}

  

golang技巧-接口型函数的更多相关文章

  1. Golang 接口型函数和http.Handler接口

    一.接口型函数 参考Golang必备技巧:接口型函数 1.原始接口实现 type Handler interface { Do(k, v interface{}) } func Each(m map[ ...

  2. golang学习之接口型函数

    先说下使用接口型函数的好处: 1.不必将某个接口函数附在某个type上面,保证了命名随意 2. 可以直接调用函数或者使用该接口,两两不耽误 直接上代码吧: // interface_func proj ...

  3. [golang note] 接口使用

    侵入式接口 √ 在其他一些编程语言中,接口主要是作为不同组件之间的契约存在,即规定双方交互的规约. √ 对契约的实现是强制的,即必须确保用户的确实现了该接口,而实现一个接口,需要从该接口继承. √ 如 ...

  4. golang(08)接口介绍

    原文链接 http://www.limerence2017.com/2019/09/12/golang13/#more 接口简介 golang 中接口是常用的数据结构,接口可以实现like的功能.什么 ...

  5. Golang之接口(interface)

    Golang最重要的接口,,,, package main import ( "fmt" ) //interface类型默认是指针 /* 接口的实现 Golang中的接口,不需要显 ...

  6. golang中接口interface和struct结构类的分析

    再golang中,我们要充分理解interface和struct这两种数据类型.为此,我们需要优先理解type的作用. type是golang语言中定义数据类型的唯一关键字.对于type中的匿名成员和 ...

  7. Golang的接口

    当一只鸟走路像鸭子,游泳像鸭子,叫起来也像鸭子,那么我们就认为它就是鸭子. Duck typing 的理念因此比喻得名. Golang 通过 interface 实现 duck typing. Eff ...

  8. 七、golang中接口、反射

    一.接口定义 1.定义 interface类型可以定义一组方法,但是这些不需要实现,并且interface不能包含任何变量 package main import ( "fmt" ...

  9. client-go中的golang技巧

    client-go中有很多比较有意思的实现,如定时器,同步机制等,可以作为移植使用.下面就遇到的一些技术讲解,首先看第一个: sets.String(k8s.io/apimachinery/pkg/u ...

随机推荐

  1. (转)什么是JSON+如何处理JSON字符串

    仍然是crifan的好文: http://www.crifan.com/summary_what_is_json_and_how_to_process_json_string/ . . . .

  2. ActiveMQ(3) ActiveMQ创建(simpleAuthenticationPlugin)安全认证

    控制端安全认证: ActiveMQ目录conf下jetty.xml: <bean id="securityLoginService" class="org.ecli ...

  3. js闭包,原型,作用域等再一次理解

    要理解闭包,原型等,首先要理解作用域 作用域:就是函数在定义的时候创建的,用于寻找使用到的变量的值的一个索引,而他内部的规则是,把函数自身的本地变量放在最前面,把自身的父级函数中的变量放在其次,把再高 ...

  4. NYOJ 115 城市平乱 (最短路)

    * 题目链接* 描述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维护着M个城市的治安,这M个城市分别编号从1到M. 现在,小工军师告诉南将军,第K号城市发生了暴乱,南 ...

  5. 【Mysql优化】MySQL Profiling 的使用

    要想优化一条 Query,我们就需要清楚的知道这条 Query 的性能瓶颈到底在哪里,是消耗的 CPU计算太多,还是需要的的 IO 操作太多?要想能够清楚的了解这些信息,在 MySQL 5.0 和 M ...

  6. Swift 枚举(七)

    http://blog.csdn.net/huangchentao/article/details/32714621 枚举 1.枚举语法 用enum并把定义放在大括号内,枚举中被定义的值是枚举的成员, ...

  7. POJ2255(二叉树遍历)

    Tree Recovery Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13000   Accepted: 8112 De ...

  8. 如何生成pyc/pyo/pyd文件

    # 一.如何生成pyc/pyo文件 # 1.通过编写代码生成 import py_compile # 参数如下 ''' def compile(file, cfile=None, dfile=None ...

  9. python 多进程锁Lock和共享内存

    多进程锁 lock = multiprocessing.Lock() 创建一个锁 lock.acquire() 获取锁 lock.release() 释放锁 with lock: 自动获取.释放锁 类 ...

  10. selenium java读取csv文件 (数据驱动)

    javacsv2.1 下载地址:http://sourceforge.net/projects/javacsv/files/ 该链接可以下载java读取csv文件的jar 包.下载之后解压找到对应的. ...