【发布时间】:2021-07-28 09:12:12
【问题描述】:
我知道已经有这样的问题:How do I convert [Size]byte to string in Go?,但我的问题是“如何将 []byte WITH ZERO VALUES 转换为字符串”
package main
import (
"fmt"
"strings"
)
func main() {
a := make([]byte, 16)
r := strings.NewReader("test")
_, _ = r.Read(a)
b := "test"
fmt.Println(string(a), b)
fmt.Println(string(a) == b)
fmt.Println(len(string(a)), len(b))
fmt.Println(a, []byte(b))
}
上面的代码打印出来:
test test
false
16 4
[116 101 115 116 0 0 0 0 0 0 0 0 0 0 0 0] [116 101 115 116]
您可以看到a 中的零值导致a 和b 之间的不等式,我应该如何处理它们?如何正确比较两者?
【问题讨论】:
-
那些不是空的。零仍然是一个值。但是,如果您想删除尾随零,只需使用与后备存储相同的数组,使用切片操作:
aShortened := a[:len]制作一个适当长度的切片。 (注意Read操作返回一个长度,你应该保存它而不是扔掉它。它也会返回一个错误,你应该检查一下。) -
您可能应该参加 Go 之旅,了解基本的语言基础知识,例如切片的工作原理、零值是什么以及 io.Reader 的 Read 方法的工作原理。
-
感谢@torek,长度有助于对数组进行切片!
-
不要在您的问题中编辑答案。
标签: go