分享

如何使用 Go 中的函数类型 (function types)?

 F2967527 2021-09-16

函数类型(function types)是一种很特殊的类型,它表示着所有拥有同样的入参类型和返回值类型的函数集合。

如下这一行代码,定义了一个名叫 Greeting 的函数类型

type Greeting func(name string) string

这种类型有两个特征:

  1. 只接收一个参数 ,并且该参数的类型为 string

  2. 返回值也只有一个参数,其类型为 string

一个函数只要满足这些特征,那么它就可以通过如下方式将该函数转换成 Greeting 类型的函数对象(也即 greet)

func english(name string) string {
    return 'Hello, ' + name
}

// 转换成 Greeting 类型的函数对象
greet := Greeting(english)
// 或者
var greet Greeting = english

greet 做为 Greeting 类型的对象,也拥有 Greeting 类型的所有方法,比如下面的 say 方法

func (g Greeting) say(n string) {
    fmt.Println(g(n))
}

直接调用试试看,并不会报错

greet.say('World')

将上面的代码整合在一起

package main

import 'fmt'

// Greeting function types
type Greeting func(name string) string

func (g Greeting) say(n string)
 {
    fmt.Println(g(n))
}

func english(name string) string {
    return 'Hello, ' + name
}

func main() {
    greet := Greeting(english)
    greet.say('World')
}
// output: Hello, World
图片

喜欢明哥文章的同学

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多