I was wondering if there is anyway to convert a map into a struct in GO. I came across the package called map structure. However, when i run it, my struct is not getting the values for my map.I have posted relevant bits of my code below
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"strconv"
"github.com/drone/routes"
"github.com/mitchellh/mapstructure"
)
var Infos = []Info{}
type Info struct {
Keyy int `json:"key"`
Valuee string `json:"value"`
}
var m map[int]string
var outgoingJSON string
var x map[string]string
func main() {
m = make(map[int]string)
x = make(map[string]string)
mux := routes.New()
mux.Put("/:key1/:value1", PutData)
mux.Get("/profile", GetProfile)
http.Handle("/", mux)
http.ListenAndServe(":3000", nil)
}
func PutData(w http.ResponseWriter, r *http.Request) {
key_data := r.URL.Query().Get(":key1")
value_data := r.URL.Query().Get(":value1")
key2, err := strconv.Atoi(key_data)
if err != nil {
panic(err)
} else {
m[key2] = value_data
}
for key2, value_data := range m {
log.Println(key2, value_data)
log.Println(m)
x[strconv.FormatInt(int64(key2), 10)] = value_data
log.Println(x)
var result Info
err1 := mapstructure.Decode(x, &result)
if err1 != nil {
panic(err1)
}
Infos = append(Infos, result)
//log.Println(key2,value_data)
// outgoingJSON, err := json.MarshalIndent(x,""," ")
// if err != nil {
// panic(err)
// break
// }
}
w.WriteHeader(204)
//log.Println(key_data)
}
func GetProfile(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
for _, p := range Infos {
outgoingJSON, err := json.MarshalIndent(p, "", " ")
if err != nil {
panic(err)
break
}
w.WriteHeader(200)
fmt.Fprint(w, string(outgoingJSON))
}
}
I have create a map[int]string first, converted it into map[string]string and then converted it into my struct. Please help. My struct returns 0 as key and null string as value.
Output:
{
"key": "",
"value": ""
}{
"key": "",
"value": ""