他の言語同様、Go言語にも、実装パターン・デザインパターンの様なものがあります。 それは他の言語でも使われるようなものであったり、Go言語独自のものであったりします。 本稿では、Go言語の実装パターンをいくつか紹介します。
Go言語では、関数の引数に規定値を持たせたり、一部の引数のみを選んで値を与えたり、ということができません。 そのため、指定しても指定しなくてもいいような、オプションの引数を作りたいと思うと、あまり単純には書くことができません。
そういった、オプションの引数を実現するのがFunctional Option Patternです。 Go言語において、関数は第一級オブジェクトです。そのため、関数の引数として関数を与える、あるいは関数の返値として関数を返す、といったことが可能です。例えば、次の関数は関数を引数にとって、関数を返す関数です。play
func NeedFunc(fn func() int) func() int {
return func() int {
v := fn() // 引数の関数を実行して
log.Println(v) // 返値をログとって
return v // 返値を返す
}
}
デザインパターンを学習済みの型であれば、Decorator patternの一種だ、と思うかもしれません。