Skip to content

Instantly share code, notes, and snippets.

@wwwbruno
Created August 6, 2017 22:52
Show Gist options
  • Save wwwbruno/3ba47b9fe7ebbfa28ce795d2650c5628 to your computer and use it in GitHub Desktop.
Save wwwbruno/3ba47b9fe7ebbfa28ce795d2650c5628 to your computer and use it in GitHub Desktop.
Json GO Encode/Decode exemple
package main
import (
"encoding/json"
"fmt"
"github.com/mitchellh/mapstructure"
)
type Message struct {
Name string `json:"name"`
Data interface{} `json:"data"`
}
type Channel struct {
Id string `json:"id"`
Name string `json:"name"`
}
func main() {
recRawMsg := []byte(`{"name":"channel add", "data": {"name":"Hardware support"}}`)
var recMessage Message
err := json.Unmarshal(recRawMsg, &recMessage)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%#v\n", recMessage)
if recMessage.Name == "channel add" {
channel, err := addChannel(recMessage.Data)
if err != nil {
fmt.Println(err)
return
}
var sendMessage Message
sendMessage.Name = "channel add"
sendMessage.Data = channel
sendRawMsg, err := json.Marshal(sendMessage)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(sendRawMsg))
}
}
func addChannel(data interface{}) (Channel, error) {
var channel Channel
err := mapstructure.Decode(data, &channel)
if err != nil {
fmt.Println(err)
return channel, err
}
channel.Id = "1"
fmt.Printf("%#v\n", channel)
return channel, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment