エラー: Golang の「非インターフェイス値でスイッチを入力できません」
型アサーションを使用する場合、エラー「」が発生することがあります。 switch on 非インターフェイス値を入力できません。」これは、インターフェイスではない値に対して型切り替えを実行しようとすると発生します。
Golang では、型切り替えにより、変数の型に基づいて条件付きでコードを実行できます。ただし、変数がインターフェイス型である必要があります。インターフェイスは、実装型が実装する必要があるメソッドのセットを定義するコントラクトを表します。
提供されたコード スニペットでは、Stringer という名前の型が 1 つの String() メソッドで定義されています。 Number 型は String() メソッドも実装しており、Stringer インターフェイスの具体的な実装となります。
type Stringer interface { String() string } type Number struct { v int } func (number *Number) String() string { return strconv.Itoa(number.v) }
ただし、n 変数で型の切り替えが試行される main 関数でエラーが発生します。これは Stringer ではなく *Number 型です。
func main() { n := &Number{1} switch v := n.(type) { case Stringer: fmt.Println("Stringer:", v) default: fmt.Println("Unknown") } }
この問題を解決するには、型アサーションを実行する前に n を Interface{} にキャストする必要があります。これは、interface{} が任意の値を表すことができるためです。
func main() { n := &Number{1} switch v := interface{}(n).(type) { case Stringer: fmt.Println("Stringer:", v) default: fmt.Println("Unknown") } }
n をinterface{} にキャストすると、基本的に、型スイッチが n が Stringer 型である可能性を考慮できるようになります。型スイッチを入力すると、n の実際の型が決定され、適切な case ブランチが実行されます。
以上がGolang で「非インターフェイス値ではスイッチを入力できません」というエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。