• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Go语言函数类型实现接口——把函数作为接口来调用实例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  其他类型能够实现接口,函数也可以,本节将对结构体与函数实现接口的过程进行对比。

  完整的代码:

package main

import "fmt"

/*
这个接口需要实现 Call() 方法,调用时会传入一个 interface{} 类型的变量,这种类型的变量表示任意类型的值。
*/
type Invoker interface {
    //调用器接口
    Call(interface{})
}

/*
定义结构体,该例子中的结构体无须任何成员,主要展示实现 Invoker 的方法。
*/
type Struct struct {
}

/*
Call() 为结构体的方法,该方法的功能是打印 from struct 和传入的 interface{} 类型的值。
*/
func (s *Struct) Call(p interface{}) {
    fmt.Println("from struct", p)
}

//函数定义为类型
type FuncCaller func(interface{})

/*
将 func(v interface{}){} 匿名函数转换为 FuncCaller 类型(函数签名才能转换),此时 FuncCaller 类型实现了 Invoker 的 Call() 方法,赋值给 invoker 接口是成功的
*/
func (f FuncCaller) Call(p interface{}) {
    f(p)
}

func main() {
    //声明接口变量
    var invoker Invoker

    /*
        使用 new 将结构体实例化,此行也可以写为 s:=&Struct。
    */
    s := new(Struct)
    //将实例化的结构体赋值到接口
    invoker = s
    //使用接口调用实例化结构体方法
    invoker.Call("hello")
    //将匿名函数转为FuncCaller类型,再赋值给接口
    invoker = FuncCaller(func(v interface{}) {
        fmt.Println("from function", v)
    })
    //使用接口调用FuncCaller.Call,内部会调用 函数主体
    invoker.Call("hello")
}

 

  程序输出:

from struct hello
from function hello

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap