golang内でredis経由でJSONを飛す時、golangから直接JavaScriptへJSONを飛す時の覚え書き
- golang内でredis経由でJSONを飛す時
// パブリッシュ側 type GetLoc struct { ID int `json:"id"` Lat float64 `json:"lat"` Lng float64 `json:"lng"` TYPE string `json:"type"` // "PERSON","BUS","CONTROL POPUP int `json:"popup"` //Address string `json:"address"` } gl.TYPE = "BUS" gl.Lat = 35.654543 + (rand.Float64()-0.5)*0.00001*20 gl.Lng = 139.795534 + (rand.Float64()-0.5)*0.00002*20 gl.ID = rand.Int() % 5 json_gl, _ := json.Marshal(gl) r, err := redis.Int(conn.Do("PUBLISH", "channel_1", json_gl)) // サブスクライブ側 for { switch v := psc.Receive().(type) { case redis.Message: fmt.Printf("%s: message: %s\n", v.Channel, v.Data) var gl GetLoc _ = json.Unmarshal(v.Data, &gl) fmt.Println(gl.ID)
- golangから直接JavaScriptへJSONを飛す時
golangから (上記の続き)var gl GetLoc _ = json.Unmarshal(v.Data, &gl) fmt.Println(gl.ID) //conn.WriteJSON(v.Data) conn.WriteJSON(gl)
JavaScriptで受けとる
<script> function obj(id, lat, lng, type, popup){ this.id = id; this.lat = lat; this.lng = lng; this.type = type; this.popup = popup; } //ws.onmessage = e => console.log(e.data) ws.onmessage = function(event) { // 受信したメッセージはここに飛んでくる console.log("RESPONSE",event.data) var obj = JSON.parse(event.data); console.log("after parse:",obj.id) }
ポイントは、Marshal、Unmarshal、
parseの使い方