【发布时间】:2018-05-03 08:39:01
【问题描述】:
我有一段简单的代码想要理解,但我正在努力弄清楚如何让它正常工作。
一般的想法是我想传递一些数据,并将其转换为字节数组。然后我想在我的字节切片的第一个索引处应用字节数组的长度,然后将字节数组添加到切片的末尾。
这是它尝试过的:
var slice []byte
myString := "Hello there"
stringAsByteArray := []byte(myString) //convert my string to byte array
slice[0] = byte(len(stringAsByteArray)) //length of string as byte array
append(slice, stringAsByteArray)
所以想法是slice 的第一个字节包含len(b) 的数量,然后是实际的字符串消息作为一系列字节。
但我明白了:
cannot use stringAsByteArray (type []byte) as type byte in append
append(slice, stringAsByteArray) evaluated but not used
【问题讨论】:
-
编译器打印的错误消息到底是什么不清楚:字符串和 []bytes 是不同的类型,您不能在追加中混合类型。第二个更为根本。所有这些在围棋巡回赛中的解释比这里解释的要好得多。
-
我认为它附加了一个字节数组,因为我确实将它转换为一个字节数组..并且看到我的切片是字节而不是字符串。我不完全理解为什么它不能将一个字节数组附加到一个字节片上。
-
"我不完全理解为什么它不能将字节数组附加到字节片"。仅仅因为
append的工作方式通常是这样的append([]T, T):您不会将切片附加到切片上,而是将一个或多个元素附加到切片上。如果您想附加切片的每个元素,请使用...,tour.golang.org/moretypes/15 和引用的 blog.golang.org/go-slices-usage-and-internals 对此进行了很好的解释。 -
您的示例中没有数组,只有切片。请阅读this。