无法比较字节片

我正在尝试编写一个单元测试用例,用于计算和预期结果。结构中的一个条目是字节切片,DeepEqual不断失败。reflect.DeepEqualcompare


示例代码 https://goplay.space/#OcAPkK-EqDX


package main


import (

    "fmt"

    "reflect"

)


func main() {

    var a = []byte("qwedsa")

    var b [6]byte

    copy(b[:], a)

    fmt.Println(reflect.DeepEqual(a, b), len(a), len(b), cap(a), cap(b))

}


HUWWW
浏览 120回答 3
3回答

喵喵时光机

reflect.DeepEqual(a, b)返回 false,因为您正在比较两种类型。var a = []byte("qwedsa") //here a is a slice with length 6var b [6]byte //here b is a array with length 6您可以使用不同的选项来执行此操作,如下所述。reflect.DeepEqual(a, b[:]) //by getting a slice from b array使用这个而不是反射包,因为反射不利于性能,正如Adrian在他的评论中提到的 bytes.Equal(a, b[:])直接创建为长度为(如果不需要将其用作数组)的切片。bavar b = make([]byte, len(a)) bytes.Equal(a, b)

蝴蝶刀刀

这样做是这样的:package mainimport "bytes"func main() {   var (      a = []byte("qwedsa")      b [6]byte   )   copy(b[:], a)   println(bytes.Equal(a, b[:]))}https://golang.org/pkg/bytes#Equal

一只甜甜圈

根据建议,您必须将其转换为并使用 。下面是相同的实现:byte arraybyte slicebytes.Equalpackage mainimport (    "bytes"    "fmt")func main() {    var a = []byte("qwedsa")    var b [6]byte    sliceb := b[:]    copy(sliceb, a)    fmt.Println(bytes.Equal(a, sliceb))}输出:true
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go