質問: 例えば下記のようなディレクトリ構成の場合 ``` ├── controllers │ ├── controller.go ├── main.go ``` `controllers`パッケージ(`controller.go`)から、`main`パッケージ、すなわち、`main.go`の関数を呼ぶにはどうすればいいのでしょうか。 `github.com//`をインポートすると、`golint`のエラーは消えましたが、実行すると循環参照はできないとのエラーがでました。 `github.com///main`ではパッケージが見つからないというエラーが出ました。 ご教授ねがえますでしょうか。
回答: `controllers` パッケージの関数を呼び出す際に、引数で `main` パッケージの関数を渡します。フックやコールバックを予め登録するという考え方です。 関数の代わりに `interface` を使うという手もあります。`controller` 側で定義された `interface` を満たすように `main` 側に実装し、`controller` を呼び出す前にその実装を渡すイメージです。C言語やJavaとは異なり、golangでは `interface` の実装する際は定義を直接参照する必要がない、充足してさえいれば良いことを利用します。