Go でエクスポートされていないメソッドを使用したインターフェイスを実装する
特定の実装の詳細を隠しながら、会計システム アクセス用のインターフェイスを定義したい状況を考えてみましょう。 。インターフェイス メソッドをエクスポートしないようにし、ローカル アダプターから同じ関数を呼び出すエクスポートされた関数を基本パッケージで提供する予定です。ただし、メソッドのエクスポートされていない実装により、コンパイラはエラーを発生させます。
エクスポートされていないメソッドを含むインターフェイスを別のパッケージに実装することは可能ですか?
回答:
考えられる解決策の 1 つは、匿名構造体を利用することです。フィールド:
type Adapter struct { accounting.IAdapter }
ただし、このアプローチでは、エクスポートされていないメソッドの独自の実装を提供できないことに注意することが重要です。つまり、Adapter.
の IAdapter.getInvoice() の実装をオーバーライドすることはできません。
別のアプローチ:
package accounting type IAdapter interface { GetInvoice() error } --- package accountingsystem type adapter struct {} func (a adapter) GetInvoice() error {return nil} func SetupAdapter() { accounting.SetAdapter(adapter{}) } --- package main func main() { accountingsystem.SetupAdapter() }
他のパッケージからaccountingsystem.Adapter タイプを隠す場合は、必要に応じて、タイプをアンエクスポートにし、アダプターをアカウンティングに登録するための関数を作成します。 package:
このアプローチでは、エクスポートされていないアダプター タイプをアカウンティング パッケージ内でラップし、他のパッケージへのアクセスを効果的に制限することで問題に対処します。以上がGo インターフェイスは、異なるパッケージ内のエクスポートされていないメソッドを使用して実装できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。