Go言語で呼び出す関数を変数で管理して動的に切り替えたい。 いわゆる関数ポインタのような機能を利用したい。
関数ポインタはないけれど、関数の型を定義すれば変数として扱える。 以下は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") }