Go言語で呼び出す関数を変数で管理する

Go言語で呼び出す関数を変数で管理して動的に切り替えたい。 いわゆる関数ポインタのような機能を利用したい。

stackoverflow.com

関数ポインタはないけれど、関数の型を定義すれば変数として扱える。 以下はStackOverflowで例示されていたコード

package main

import "fmt"

type HelloFunc func(string)

func SayHello(to string) {
    fmt.Printf("Hello, %s!\n", to)
}

func main() {
    var hf HelloFunc
    hf = SayHello
    hf("world")
}

もしくは、型定義しなくても直接変数に関数シグネチャを指定してもよい。 (関数シグネチャ(function signature)という用語も初めて知った)

package main

import "fmt"

func SayHello(to string) {
    fmt.Printf("Hello, %s!\n", to)
}

func main() {
    var hf func(string)
    hf = SayHello
    hf("world")
}