Я пишу кусок Go для отправки данных json по многоадресному UDP:
func send(a string, messages chan interface{}) {
addr, err := net.ResolveUDPAddr("udp", a)
CheckError(err)
c, err := net.DialUDP("udp", nil, addr)
CheckError(err)
for {
msg := <-messages
myjson, err := json.Marshal(msg)
if err != nil {
fmt.Println("Error encoding JSON")
return
}
//Write to bytes to multicast UDP
c.Write([]byte(myjson))
time.Sleep(2 * time.Second)
}
}
Итак, мой json преобразуется в массив байтов, чтобы он работал. Вот моя функция "приемника":
func serveMulticastUDP(a string, messages chan interface{}) {
addr, err := net.ResolveUDPAddr("udp", a)
CheckError(err)
l, err := net.ListenMulticastUDP("udp", nil, addr)
l.SetReadBuffer(maxDatagramSize)
for {
b := make([]byte, maxDatagramSize)
n, src, err := l.ReadFromUDP(b)
if err != nil {
log.Fatal("ReadFromUDP failed:", err)
}
s := string(b[:n])//here is my problem, I want s to be map[string]interface before sending in my channel
messages<-s
log.Println(s)
log.Println(src)
log.Println(n)
//h(src, n, b)
}
}
Как преобразовать массив байтов в интерфейс map [string] (json)?