欢迎访问Ningto's博客

Menu
  • 首页
  • 归档
  • 关于
  • 书签
  • 必应壁纸
  • IT聚合
  • 工具
    • 我的工具列表
    • 我的网盘
    • 必应每日壁纸API
    • Html转Markdown
    • 仙尘光标
Menu

golang接口型函数作用

最后更新 2021-01-13 10:07:46   阅读量 1473

在我们使用golang写http服务的时候通常会使用http.Handle来注册pattern对应的Handler,其实这里就使用到了接口型函数,源码定义如下:

type Handler interface {
    ServeHTTP(ResponseWriter, *Request)
}

type HandlerFunc func(ResponseWriter, *Request)

func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
    f(w, r)
}

首先是定义了ServeHTTP接口,根据这个接口又定义了一个HandlerFunc普通函数,同时这个函数又实现了ServerHTTP接口,直接调用函数本身,所以在这里称之为接口型函数。

这样做的好处是,用户使用起来非常灵活,我们自己来模仿写个简单的例子:

package main

import (
    "fmt"
)

type Service interface {
    Call(key string)
}

type ServiceFunc func(key string)

func (s ServiceFunc) Call(key string) {
    s(key)
}

type EchoService struct {
}

func (echo EchoService) Call(key string) {
    fmt.Println("echo service call, key:", key)
}

func PrintKey(key string) {
    fmt.Println("print key:", key)
}

func Foo(s Service, key string) {
    s.Call(key)
}

func main() {
    Foo(new(EchoService), "object")

    Foo(ServiceFunc(func(key string) {
        fmt.Println("service func, key:", key)
    }), "lambda expression")

    Foo(ServiceFunc(PrintKey), "normal function")
}

在使用的时候我们有三种方式:

  1. struct对象
  2. 匿名函数
  3. 普通函数

最后,大家应该清楚这种写法的好处了吧。

(转载本站文章请注明作者和出处:泞途 - ningto.com)

下一篇 – QTableWidget整行高亮去虚线,样式定制
上一篇 – Qt 正确的显示窗口

  1. Go

toningto@outlook.com

标签云

Design Shell Web Windows Qt Database React Bug Node.js Android Mac Go ChatGPT Java Others Tips Javascript IOS Python MQ Linux C/C++ Tools Mobile Boost Life MongoDB Product

推广链接

【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年99元

多谢支持,用了好几年,服务很稳定支持多设备!

其他

文章RSS

Copyright © 2016 Welcome To Ningto Blog | 鄂ICP备17003086号-2