Goでは、インターフェースを実装する必要があると述べていません(動的言語の 'duck typing'に似た '構造タイピング'と呼ばれています)。 タイプを強制的にインターフェイスを実装する場合(たとえば、C#またはJavaでインターフェイスを継承するときなど)言い換えれば、インタフェースを実装することを忘れる(または署名を間違える)ことが間違いであり、その間違いを早期にキャッチしたい場合はどうでしょうか。それを行う最善の方法は何ですか?あなたが行うことGoタイプに強制的にインターフェースを実装する
答えて
最善のことは、あなたがタイプA
がStringer
インタフェースを実装して確認する例えば
変数インターフェースにタイプのインスタンスを割り当てようとしています。
あなたはここでは、この
var _ Stringer = new(A) //or
var _ Stringer = A{}
のように行うことができますが、例A
では、サンプルプログラムでは、インターフェイスを実装し、B
はここ
package main
import (
"fmt"
)
type Stringer interface {
String() string
}
type A struct {
}
func (a A) String() string {
return "A"
}
type B struct {}
var _ Stringer = new(A)
var _ Stringer = new(B)
func main() {
fmt.Println("Hello, playground")
}
プレイリンクしません:play.golang
その優雅な解決策のために@Sarathspに感謝します。私はそれが時々カナリー試験と呼ばれることを学んだ。(鉱山の貧しいカナリアから、鉱山に警告するのに十分な速さでガス中毒によって死ぬだろう)。 –
私は、ダミー変数が単にコンパイラによって破棄され、スペースもCPU時間も消費しないと仮定します。疑わしい場合は、常に_test.goファイルに移動することができます。 –
これはコンパイラによって破棄されます。そのファイルをテストファイルに移動するのはあなたの呼び出しですが、実装要件が明示的になるので、そこに置くことをお勧めします:D、 私は 'var _ Stringer =(* A)(nil)'と答えます。懸念事項:D –
への@Sarathspが言ったことを完了してください: 基本的に、ダミー変数を宣言することによって(アンダースコアは、あなたのタイプのインスタンスを割り当てている間、コンパイル時に非常に明白なエラーが発生します。
type MyType struct {
}
func (*MyType) Read() {
}
var _ io.Reader = &MyType{}
cannot use MyType literal (type *MyType) as type io.Reader in assignment:
*MyType does not implement io.Reader (missing Read method)
Or
cannot use MyType literal (type *MyType) as type io.Reader in assignment:
*MyType does not implement io.Reader (wrong type for Read method)
have Read()
want Read([]byte) (int, error)
- 1. 強制的にプライベートメソッドを実装するクラス
- 2. QDockWidgetを強制的に実行する
- 3. スレッドコンテキストスイッチを強制的に実行する
- 4. Goでの強制的なマップタイプ
- 5. .net:インターフェース実装を自動的に記入する
- 6. QTP Web Extensibilty - QTPにテスト実行を強制的に強制する方法
- 7. 実行中のプロセスを強制的に強制終了するには?
- 8. Java:toStringをオーバーライドするように実装を強制するデザインインターフェイス
- 9. Visual Basic:特定のメソッドを実装するフォームを強制的に
- 10. ListのタイプをKotlinのインターフェースの実装に制限することはできますか?
- 11. JavaScriptを強制的に実行するEventListenerを強制しますか?
- 12. PostgresとGOで "ロック"を強制する
- 13. フラグメントコールバックを実装するように強制する
- 14. 強制的にgitでファイルにプルを強制するには?
- 15. GMが強制的にspacer.gifを含むTDを強制的に16pxにする
- 16. サブクラスにメソッドの実装を強制する方法
- 17. スパークスケジューラ実行するアプリケーションを強制的に実行
- 18. 強制的にGitのサブモジュールを強制的に最新の状態にする
- 19. 強制的にDataGridViewを強制的に列と行を生成する
- 20. 安全プレイブックの実行を強制的に強制終了できますか?
- 21. C++での強制的なレイアウトの実装
- 22. IEブラウザで強制的にキャッシュを強制的に更新する - C#、ASP
- 23. Gradle:強制的にカスタムタスクを常に実行する(キャッシュなし)
- 24. iOSとSwift:unwrap tableView.indexPathを強制的に実行するには?
- 25. pyspark joinを強制的に早めに実行する
- 26. VS2008 C++ポストビルドイベントを強制的に実行するには?
- 27. HTMLリンクを強制的に強制する方法は?
- 28. 強制的にOpenGLコアプロファイルを強制する
- 29. jbossポータルサーバで強制的にユーザセッション(ログアウト)を強制終了する
- 30. リレーでフェッチを強制的に強制する方法
タイプを必須のインターフェイスとして使用するテストを作成します。タイプが前記インタフェースを実装しない限り、テストは合格しない。 – ain