これはGolangでのキャストですか?質問する

これはGolangでのキャストですか?質問する

paxPayment, ok = dataObject.(*entities.PassengerPayment)

括弧は何のために使われるのですか? この代入演算で何が起こっているのかよく分かりません。

この質問に答えるには、さらに詳しい情報が必要ですか?

ベストアンサー1

それは型アサーション型アサーションは次の目的で使用できます。

  • の値を取得するコンクリートの値から入力インターフェースタイプ
  • または値を取得する違う初期インターフェイスタイプとは異なるインターフェイスタイプ(異なるインターフェイスタイプ)メソッドセット実際には元のもののサブセットではなく、単純な型を使用して簡単に取得できる。変換)。

仕様から引用:

xインターフェース型と型の式の場合T、プライマリ式

x.(T)

xは ではなくnil、 に格納されている値がx型であると主張しますT。この表記法x.(T)は と呼ばれます。型アサーション

より正確には、Tがインターフェース型でない場合、x.(T)の動的型x同一型に。Tこの場合、T埋め込むの (インターフェース) 型。それ以外の場合、は型 の値を格納xできないため、型アサーションは無効です。がインターフェース型の場合、の動的型がインターフェース を実装することをアサートします。xTTx.(T)xT

より具体的には、あなたの例は、型アサーションが成立するかどうかも報告する特別な形式です。成立しない場合はokとなりfalse、アサーションが成立する場合は とokなりますtrue

この特別なフォームは、次のフォームとは異なり、パニックに陥ることはありません。

paxPayment = dataObject.(*entities.PassengerPayment)

dataObject型の値が保持されていない場合は*entities.PassengerPaymentパニックが発生します。

おすすめ記事