Go の型アサーション: 「非インターフェイス値でスイッチを入力できない」の解決
Go では、型アサーションには値があるかどうかのチェックが含まれます特定のタイプに属します。 「非インターフェイス値ではスイッチを入力できません」というエラーが発生した場合は、チェックされている値がインターフェイスではないことを意味します。
次のコードを検討してください。
type Stringer interface { String() string } type Number struct { v int } func (number *Number) String() string { return strconv.Itoa(number.v) } func main() { n := &Number{1} switch v := n.(type) { case Stringer: fmt.Println("Stringer:", v) default: fmt.Println("Unknown") } }
このコードは、次のことを試みます。を入力して値 n (*Number 型) をオンにします。ただし、「非インターフェイス値では型を切り替えることができません」というエラーが発生します。
これを解決するには、型アサーションを実行する前に n をインターフェイス値にキャストする必要があります。これは、タイプの切り替えはインターフェイス値に対してのみ実行できるためです。次の修正されたコードは、これを示しています。
switch v := interface{}(n).(type) { case Stringer: fmt.Println("Stringer:", v) default: fmt.Println("Unknown") }
n をインターフェイス{}にキャストすることで、結果のインターフェイス値に対して型の切り替えを実行できるようになります。これにより、n が Stringer 型であるかどうかを正常にチェックし、対応するメッセージを出力できるようになります。
以上がGo が「非インターフェイス値ではスイッチを入力できません」というエラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。