Go 言語は静的型付けプログラミング言語であり、プログラム内のインターフェイス変数に格納される特定の値の型を決定する方法の 1 つが型アサーション (Type Assertion) です。 Go 言語では、インターフェイス変数には任意の型の値を格納できますが、インターフェイス変数に格納される型情報には制限があり、インターフェイス変数に対してすべての種類の操作を実行できるわけではありません。したがって、実際のアプリケーションでは、インターフェイス変数に格納されている特定の値の型を判断して変換する必要があります。これが型アサーションの機能です。
Go 言語の型アサーションには、値型アサーションとポインター型アサーションの 2 つの形式があります。値型アサーションとポインタ型アサーションでは、インターフェイス変数の値型を判断して変換する方法が若干異なります。
値型アサーション:
値型アサーションの構文形式は次のとおりです:
x.(T)
このうち、x はインターフェイス型の変数、T は特定のインターフェイス型を表します。タイプ。この型アサーションは、x が型 T の値を格納する場合は true、それ以外の場合は false です。
型アサーションの結果には 2 つの値があります。最初の値は、x が型 T に変換された後の値です。2 番目の値は、この型アサーションの結果が true かどうかを示すブール値です。具体的なコードの実装は次のとおりです。
var x interface{} x = "hello" s, ok := x.(string) if ok { fmt.Printf("x 类型为 string,值为 %s。 ", s) } else { fmt.Printf("x 不是 string 类型。 ") }
上記のコードでは、最初に空のインターフェイス タイプ変数 x が定義され、文字列 "hello" が変数 x に割り当てられます。値型アサーション ステートメント x.(string) は、変数 x を文字列型に変換しようとします。s は変換された文字列を表し、ok は型アサーションが成功したかどうかを表します。 ok が true の場合、x に格納されている値の型が文字列型であることを意味し、変換された文字列 s を出力できます。 ok が false の場合、x が文字列型ではないことを意味し、対応するプロンプト情報を出力できます。
ポインタ型アサーション:
ポインタ型アサーションの構文形式は、アサーション時にポインタを操作する必要があることを除いて、値型アサーションの構文形式と似ています。
x.(*T)
このうち、*T は T 型のポインタ型を表します。この型アサーションは、x に格納されている値がポインタ型 T の場合は true、それ以外の場合は false です。
値型アサーションと同様に、ポインタ型アサーションにも 2 つの値があります。最初の値は、x が T 型ポインタに変換された後の値です。2 番目の値は、型アサーションを示すブール値です。結果は真実です。具体的なコード実装は次のとおりです。
type Foo struct { bar string } func main() { var i interface{} = &Foo{"hello"} f, ok := i.(*Foo) if ok { fmt.Printf("i 是指针类型,指向 Foo 类型的变量,f.bar 的值为 %s。 ", f.bar) } else { fmt.Printf("类型断言失败。 ") } }
上記のコードでは、Foo 型の構造体が定義され、空のインターフェイス変数 i が main 関数で定義され、Foo 型を指す構造体が定義されています。ポインタは変数 i に代入されます。ポインタ型アサーション x.(*Foo) は、変数 x を Foo 型の構造体を指すポインタ型に変換しようとします。f は変換されたポインタを表し、ok は型アサーションが成功したかどうかを表します。 ok が true の場合、x に格納されている値の型が Foo 型の構造体を指すポインタ型であることを意味し、ポインタが指す構造体のフィールド値を出力できます。 ok が false の場合は、x が Foo 型構造体を指すポインタ型ではないことを意味し、対応するプロンプト情報を出力できます。
概要:
型アサーションは、Go 言語でインターフェイス変数を操作するためによく使用される方法です。型アサーションは、インターフェイス変数に格納されている型を決定し、それに対応する調整を行うことができます。操作する。 Go 言語の型アサーションには、値型アサーションとポインター型アサーションの 2 つの形式があります。型アサーションを使用する場合は、実行時エラーを回避するためにエラー処理に注意する必要があります。
以上がGo 言語の型アサーションとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。