paxPayment, ok = dataObject.(*entities.PassengerPayment)
括弧は何のために使われるのですか? この代入演算で何が起こっているのかよく分かりません。
この質問に答えるには、さらに詳しい情報が必要ですか?
ベストアンサー1
それは型アサーション型アサーションは次の目的で使用できます。
- の値を取得するコンクリートの値から入力インターフェースタイプ
- または値を取得する違う初期インターフェイスタイプとは異なるインターフェイスタイプ(異なるインターフェイスタイプ)メソッドセット実際には元のもののサブセットではなく、単純な型を使用して簡単に取得できる。変換)。
仕様から引用:
x
インターフェース型と型の式の場合T
、プライマリ式x.(T)
x
は ではなくnil
、 に格納されている値がx
型であると主張しますT
。この表記法x.(T)
は と呼ばれます。型アサーション。より正確には、
T
がインターフェース型でない場合、x.(T)
の動的型x
が同一型に。T
この場合、T
埋め込むの (インターフェース) 型。それ以外の場合、は型 の値を格納x
できないため、型アサーションは無効です。がインターフェース型の場合、の動的型がインターフェース を実装することをアサートします。x
T
T
x.(T)
x
T
より具体的には、あなたの例は、型アサーションが成立するかどうかも報告する特別な形式です。成立しない場合はok
となりfalse
、アサーションが成立する場合は とok
なりますtrue
。
この特別なフォームは、次のフォームとは異なり、パニックに陥ることはありません。
paxPayment = dataObject.(*entities.PassengerPayment)
dataObject
型の値が保持されていない場合は*entities.PassengerPayment
パニックが発生します。