如何使用 Go 中的函數類型 -function types-?

函數類型(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
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/hrnQI8Gx-LeJq9jQBhWsxg