2015-07-13 64 views
5

paxPayment, ok = dataObject.(*entities.PassengerPayment)這是在golang的鑄造?

括號用於什麼?我不確定這次任務中發生了什麼。

你需要更多的細節來回答這個問題嗎?

+2

它被稱爲[Type assertion](https://golang.org/ref/spec#Type_assertions)。 – icza

+0

@icza做出答案。 – inf

回答

12

這只是一個Type assertion。 A型斷言可用於:

  • 接口類型的值獲得混凝土類型的值
  • 或以獲得不同接口類型比初始值一(與不同的method set的接口,實際上不是原始子集的子集,因爲可以簡單地使用簡單類型conversion獲得)。

從規範引用:

對於接口類型的表達式x和類型T,初級表達

x.(T) 

斷言x不是nil並且存儲的值在xT類型。符號x.(T)被稱爲類型斷言

更精確地,如果T不是接口類型,x.(T)斷言動態類型的xidentical到類型T。在這種情況下,T必須implement(接口)類型x;否則類型斷言無效,因爲x不可能存儲類型爲T的值。如果T是接口類型,則x.(T)聲明動態類型x實現接口T

更具體地說,你的例子是它的一個特殊形式,它也報告類型斷言是否成立。如果不是,ok將是false,如果斷言成立,ok將是true

paxPayment = dataObject.(*entities.PassengerPayment) 

如果哪個dataObject不成立*entities.PassengerPayment類型的值會產生恐慌:

這種特殊的形式從來不像形式恐慌。