如何使用带有两个[] byte切片或数组的Go append?

我最近尝试在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将零个或多个值附加xstype

S(必须是切片类型),并返回结果切片(也是type)S。值x将传递到类型为的参数,...T

其中T是的元素类型,S并且适用各自的参数传递规则。

append(s S, x ...T) S // T is the element type of S

...参数传递给参数

如果最终参数可分配给切片类型[]T...T则在参数后跟时可以将其作为参数的值原样传递...


您需要使用[]T...最后一个参数。

在您的示例中,使用最终参数slice type []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]

以上是 如何使用带有两个[] byte切片或数组的Go append? 的全部内容, 来源链接: utcz.com/qa/405497.html

回到顶部