go语言中的invalid character '\x00' after top-level value

设计的一个项目,须要从客户端中,发生一个结构体信息给服务端,服务端对接收到的信息进行验证。这里我考虑的是将结构体转换为json,而后传递至服务端,服务端解析json便可。json

因为json的数据格式就是[]byte,因此在网络传递中不须要转换,直接传递就能够了。对方接收到[]byte数据,也就是json数据,直接json解析就好了。网络

然而,在服务端中解析时,显示invalid character '\x00' after top-level value。tcp

结构体代码:spa

type Message struct { Name string Info string }

先附上客户端和服务端代码。设计

客户端:code

tcpAddr, _ := net.ResolveTCPAddr("tcp", "127.0.0.1:9999") conn, err := net.DialTCP("tcp", nil, tcpAddr) message.Name = "cloud" message.Info = "LIST" data, _ := json.Marshal(message) conn.Write(data) 

  服务端代码:blog

//读取一个客户端发送过来的数据
data := make([]byte, 128)
total, err := tcpConn.Read(data)
var message Message
err = json.Unmarshal(data, &message)
if err != nil {
        fmt.Println(err)
}

  fmt.println这里,就显示invalid character '\x00' after top-level value,通过分析,将string

 

err = json.Unmarshal(data, &message) 

  改成it

err = json.Unmarshal(data[:total], &message) 

  

便可。缘由在于,数据读取是有长度的,若是没有规定,默认会把最后一个字符删掉(个人猜想,目前我还不是很清楚,懂的大神请帮忙回答)
还有一点,结构体的字段名称,必须首字母大写,我也搞不懂为何是这个样子。class

相关文章
相关标签/搜索