自学Go我正在构建一个简单的服务器,它接受一些输入,进行一些处理,并将输出发送回客户端(包括原始输入).
输入的长度可以从大约5到13个字符+结束线以及客户端发送的其他任何guff.
输入被读入字节数组,然后转换为字符串进行某些处理.另一个字符串被附加到此字符串,整个事物被转换回字节数组以发送回客户端.
问题是输入用一堆NUL字符填充,我不知道如何摆脱它们.
所以我可以循环遍历数组,当我找到一个空字符时,记下长度(n),创建一个新长度的字节数组,并将前n个字符复制到新的字节数组并使用它.这是最好的方式,还是有什么东西让我更容易?
一些剥离代码:
data := make([]byte, 16)
c.Read(data)
s := strings.Replace(string(data[:]), "an", "", -1)
s = strings.Replace(s, "\r", "", -1)
s += "some other string"
response := []byte(s)
c.Write(response)
c.close()
Run Code Online (Sandbox Code Playgroud)
此外,如果我在这里做任何其他明显愚蠢的事情,那将很高兴知道.
zzz*_*zzz 45
在包"bytes"中,func Trim(s []byte, cutset string) []byte是你的朋友:
Trim通过切掉cutset中包含的所有前导和尾随UTF-8编码的Unicode代码点来返回s的子切片.
// Remove any NULL characters from 'b'
b = bytes.Trim(b, "\x00")
Run Code Online (Sandbox Code Playgroud)
你的方法听起来基本正确。一些备注:
当您在 中找到第一个 nul 字节的索引时data,您不需要复制,只需截断切片:data[:idx]。
bytes.Index应该能够为您找到该索引。
还有bytes.Replace所以你不需要转换为字符串。