go语言中的invalid character 'x00' after top-level value
Posted cloudstrife
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言中的invalid character 'x00' after top-level value相关的知识,希望对你有一定的参考价值。
设计的一个项目,需要从客户端中,发生一个结构体信息给服务端,服务端对接收到的信息进行验证。这里我考虑的是将结构体转换为json,然后传递至服务端,服务端解析json即可。
由于json的数据格式就是[]byte,所以在网络传递中不需要转换,直接传递就可以了。对方接收到[]byte数据,也就是json数据,直接json解析就行了。
然而,在服务端中解析时,显示invalid character ‘x00‘ after top-level value。
结构体代码:
type Message struct {
Name string
Info string
}
先附上客户端和服务端代码。
客户端:
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)
服务端代码:
//读取一个客户端发送过来的数据 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,经过分析,将
err = json.Unmarshal(data, &message)
改为
err = json.Unmarshal(data[:total], &message)
即可。原因在于,数据读取是有长度的,如果没有规定,默认会把最后一个字符删掉(我的猜测,目前我还不是很清楚,懂的大神请帮忙回答)
还有一点,结构体的字段名称,必须首字母大写,我也搞不懂为什么是这个样子。
以上是关于go语言中的invalid character 'x00' after top-level value的主要内容,如果未能解决你的问题,请参考以下文章
记录一个问题go get -u github.com/go-redis/redis出现错误" invalid character '.' after top-level (代
python报错:invalid character in identifier。
Java中的 Invalid character constant(无效的字符常数)
如何修复解析错误:Vue 中的 invalid-first-character-of-tag-name.eslint (vue/no-parsing-error)
DOM Exception 5 INVALID CHARACTER 错误在 javascript 中的有效 base64 图像字符串上
安装JDK时提示 IllegalArgumentException:Invalid characters in hostname的解决方法