Golangでパッケージからmainパッケージの関数を呼ぶ


例えば下記のようなディレクトリ構成の場合

[code]

    ├── controllers
    │   ├── controller.go
    ├── main.go
    
[/code]

`controllers`パッケージ(`controller.go`)から、`main`パッケージ、すなわち、`main.go`の関数を呼ぶにはどうすればいいのでしょうか。

`github.com/<user-name>/<project-
name>`をインポートすると、`golint`のエラーは消えましたが、実行すると循環参照はできないとのエラーがでました。

`github.com/<user-name>/<project-name>/main`ではパッケージが見つからないというエラーが出ました。  
ご教授ねがえますでしょうか。




`controllers` パッケージの関数を呼び出す際に、引数で `main`
パッケージの関数を渡します。フックやコールバックを予め登録するという考え方です。

関数の代わりに `interface` を使うという手もあります。`controller` 側で定義された `interface` を満たすように
`main` 側に実装し、`controller` を呼び出す前にその実装を渡すイメージです。C言語やJavaとは異なり、golangでは
`interface` の実装する際は定義を直接参照する必要がない、充足してさえいれば良いことを利用します。




`controllers` パッケージの関数を呼び出す際に、引数で `main`
パッケージの関数を渡します。フックやコールバックを予め登録するという考え方です。

関数の代わりに `interface` を使うという手もあります。`controller` 側で定義された `interface` を満たすように
`main` 側に実装し、`controller` を呼び出す前にその実装を渡すイメージです。C言語やJavaとは異なり、golangでは
`interface` の実装する際は定義を直接参照する必要がない、充足してさえいれば良いことを利用します。

