Goでは、
type PacketType1 struct {
myValue string
}
type PacketType2 struct {
myValue2 string
}
これらを総称的に渡して、型を何らかの方法でチェックできますか?インターフェイスを調べましたが、それらは関数を継承するためのもののようです。名前に基づくと、これはパケットシステム用です。これらのパケットを引数として関数に渡し、タイプを確認し、構造体のプロパティを取得する方法などがあります。これが不可能な場合は、どうすればよいでしょうか。 Goでパケットシステムを実装するのに最適ですか?
値をとして渡し、interface{}
タイプスイッチを使用して、渡されたタイプを検出することができます。または、必要な共通機能を公開するインターフェースを作成して、それを使用することもできます。
インターフェイスとタイプスイッチ:
func Example(v interface{}){
switch v2 := v.(type) {
case PacketType1:
// Do stuff with v1 (which has type PacketType1 here)
case PacketType2:
// Do stuff with v1 (which has type PacketType2 here)
}
}
共通インターフェース:
type Packet interface{
GetExample() string
// More methods as needed
}
// Not shown: Implementations of GetValue() for all types used
// with the following function
func Example(v Packet) {
// Call interface methods
}
どちらの方法が最適かは、何をしているのかによります。ほとんどのタイプが似ており、わずかな違いがある場合は、1つまたは複数の一般的なインターフェイスがおそらく最良です。それらがまったく異なる場合は、タイプスイッチの方が良い場合があります。どちらが最も短く、最も明確なコードを生成します。
2つの方法を組み合わせて使用するのが最善の場合もあります...
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加