2017-07-11 11 views
0

私はGoでチャットアプリケーションを作成し始めていて、JSONを扱う最善の方法が何か不思議です。私は別の記事を読んだので、クライアントが送信するすべてのアクションに対して異なるタイプを作成する必要があるようです。GoでのJSONのベストプラクティス

NewMessage 
DeleteMessage 
EditMessage 

私の理解するには、私はこれらのアクションに合わせ3種類を作成する必要があります。

は、3つのアクションがあるとしましょう。このような何か:

type Message struct { 
    Action string `json:"action"` 
    Data map[string]*json.RawMessage `json:"data"` 
} 

type MessageMeta struct { 
    UserId int `json:"user_id"` 
    ChannelID int `json:"channel_id"` 
} 

type NewMessageAction struct { 
    MessageMeta 
    Message string `json:"message"` 
} 

type EditMessageAction struct { 
    MessageMeta 
    MessageId int `json:"message_id"` 
    Message string `json:"message"` 
} 

type DeleteMessageAction struct { 
    MessageMeta 
    MessageId int `json:"message_id"` 
} 

私はNode.jsの世界から来た(私は2つを比較する必要はありませんが)私にあるすべてのアクションの種類を作成し、維持するために少しも冗長と思われます。何百ものアクションがある場合はどうなりますか?

答えて

2

Goは、厳密に型指定されたプログラミング言語です。 JavaScriptのような緩い型はありません。

メッセージごとに強いデータ型が必要な場合は、各タイプの構造体を記述する必要があります。そうでなければ、メッセージをmap[string]interface{}(一般的なJSONオブジェクトの場合)に非マーシャルして代わりに使用することができます(interfaceの値を強い型に変換するために型アサーションが必要になります)。

関連する問題