我最近尝试在Go中附加两个字节数组切片,并遇到了一些奇怪的错误。我的代码是:
one:=make([]byte, 2) two:=make([]byte, 2) one[0]=0x00 one[1]=0x01 two[0]=0x02 two[1]=0x03 log.Printf("%X", append(one[:], two[:])) three:=[]byte{0, 1} four:=[]byte{2, 3} five:=append(three, four)
错误是:
cannot use four (type []uint8) as type uint8 in append cannot use two[:] (type []uint8) as type uint8 in append
考虑到Go的切片的所谓鲁棒性应该不是问题:
http://code.google.com/p/go- wiki/wiki/SliceTricks
我在做什么错,我应该如何追加两个字节数组?
Go编程语言规范 附加并复制切片 可变参数函数append将零个或多个值附加x到stype S(必须是切片类型),并返回结果切片(也是type)S。值x将传递到类型为的参数,...T 其中T是的元素类型,S并且适用各自的参数传递规则。 append(s S, x ...T) S // T is the element type of S 将...参数传递给参数 如果最终参数可分配给切片类型[]T,...T则在参数后跟时可以将其作为参数的值原样传递...。
Go编程语言规范
附加并复制切片
可变参数函数append将零个或多个值附加x到stype S(必须是切片类型),并返回结果切片(也是type)S。值x将传递到类型为的参数,...T 其中T是的元素类型,S并且适用各自的参数传递规则。
append
x
s
S
...T
T
append(s S, x ...T) S // T is the element type of S
将...参数传递给参数
...
如果最终参数可分配给切片类型[]T,...T则在参数后跟时可以将其作为参数的值原样传递...。
[]T
您需要使用[]T...最后一个参数。
[]T...
在您的示例中,使用最终参数slice type []byte,参数后跟...,
[]byte
package main import "fmt" func main() { one := make([]byte, 2) two := make([]byte, 2) one[0] = 0x00 one[1] = 0x01 two[0] = 0x02 two[1] = 0x03 fmt.Println(append(one[:], two[:]...)) three := []byte{0, 1} four := []byte{2, 3} five := append(three, four...) fmt.Println(five) }
游乐场:https : //play.golang.org/p/2jjXDc8_SWT
输出:
[0 1 2 3] [0 1 2 3]