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

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

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. IDEA 用maven创建web项目编译时不能发布resources中的文件

    1.在pom.xml加入 <build> <resources> <resource> <directory>${basedir}/src/main/j ...

  2. Ubuntu pppoe 拨号上网

    -------------蓝色是终端里面的连接方式,可以不看--------------------- ADSL上网,Ubuntu下是可以的,虽然以前没用过拨号上网,不过查了查也不是很麻烦. 打开终端 ...

  3. HDU 1395

    2^x mod n = 1 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  4. 【BZOJ1976】能量魔方 [最小割]

    能量魔方 Time Limit: 10 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description 小C 有一个能量魔方,这个魔方可神奇 ...

  5. [POJ1113&POJ1696]凸包卷包裹算法和Graham扫描法应用各一例

    凸包的算法比较形象好理解 代码写起来也比较短 所以考前看一遍应该就没什么问题了..>_< POJ1113 刚开始并没有理解为什么要用凸包,心想如果贴着城堡走不是更好吗? 突然发现题目中有要 ...

  6. 滑杆(JSlider)和进度指示条(JProgressBar) 的使用

    package first; import javax.swing.*; import javax.swing.border.TitledBorder; import java.awt.*; impo ...

  7. C# 从服务器下载文件

    一.//TransmitFile实现下载 protected void Button1_Click(object sender, EventArgs e) { /* 微软为Response对象提供了一 ...

  8. 计算Linux权限掩码umask值

    创建文件默认最大权限为666 (-rw-rw-rw-),默认创建的文件没有可执行权限x位. 创建目录默认最大权限777(-rwx-rwx-rwx),默认创建的目录属主是有x权限,允许用户进入. 简单的 ...

  9. HTTP===返回结果的HTTP状态码

    HTTP 状态码负责表示客户端 HTTP 请求的返回结果.标记服务器端的处理是否正常.通知出现的错误等工作. 1.状态码告知从服务器端返回的请求结果 状态码的职责是当客户端向服务器端发送请求时,描述返 ...

  10. react+webpack+babel+eslint+redux+react-router+sass 环境快速搭建

    本文中的例子支持webpack-dev-server自动刷新及react热替换,使用了redux管理state,用react-router切换路由,用babel实现ES6语法书写,同时支持async/ ...