這些類型的模式,我有多種類型這樣的:如何去
type QueryMessage struct {
Header MessageHeader
Type MessageType
Query SqlQuery
}
type UpdateMessage struct {
Header MessageHeader
Type MessageType
OldData map[string]interface{}
NewData map[string]interface{}
}
type InsertMessage struct {
Header MessageHeader
Type MessageType
Data map[string]interface{}
}
他們都有一個共同點,Header
和Type
兩個屬性。最後,我需要將它們聚合成一個通用消息數組。 目前我Message
界面看起來是這樣的:
type Message interface {}
所以我基本上做的是這樣的(他們所有鑄造到Message接口):
q := QueryMessage{ ... }
u := UpdateMessage{ ... }
i := InsertMessage{ ... }
allMessages := [3]Message { Message(q), Message(u), Message(i), }
這工作,但它失去所有類型信息,我希望仍然能夠從Message
類型中暴露Header
和Type
(這樣客戶端代碼在理論上可以將基於Type
的Message
轉換回它的原始類型
這怎麼辦?我找不到一個合適的方法,接口不能有屬性,如果我使Message
成爲一個結構體,Go不允許我使用e。 G。一個QueryMessage
到Message
了。
僅供參考,你並不需要,如果該值的類型實現該接口的值轉換爲一個接口。即'[3] Message {q,u,i}'會編譯得很好。 – mkopriva