为了账号安全,请及时绑定邮箱和手机立即绑定

无法比较字节片

无法比较字节片

Go
HUWWW 2022-09-05 17:46:46
我正在尝试编写一个单元测试用例,用于计算和预期结果。结构中的一个条目是字节切片,DeepEqual不断失败。reflect.DeepEqualcompare示例代码 https://goplay.space/#OcAPkK-EqDXpackage mainimport (    "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))}
查看完整描述

3 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

reflect.DeepEqual(a, b)返回 false,因为您正在比较两种类型。

var a = []byte("qwedsa") //here a is a slice with length 6

var b [6]byte //here b is a array with length 6

您可以使用不同的选项来执行此操作,如下所述。

  1. reflect.DeepEqual(a, b[:]) //by getting a slice from b array

  2. 使用这个而不是反射包,因为反射不利于性能,正如Adrian在他的评论中提到的

bytes.Equal(a, b[:])

  1. 直接创建为长度为(如果不需要将其用作数组)的切片。ba

var b = make([]byte, len(a))
bytes.Equal(a, b)


查看完整回答
反对 回复 2022-09-05
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

这样做是这样的:


package main

import "bytes"


func main() {

   var (

      a = []byte("qwedsa")

      b [6]byte

   )

   copy(b[:], a)

   println(bytes.Equal(a, b[:]))

}

https://golang.org/pkg/bytes#Equal


查看完整回答
反对 回复 2022-09-05
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

根据建议,您必须将其转换为并使用 。下面是相同的实现:byte arraybyte slicebytes.Equal


package main


import (

    "bytes"

    "fmt"

)


func main() {

    var a = []byte("qwedsa")

    var b [6]byte


    sliceb := b[:]

    copy(sliceb, a)

    fmt.Println(bytes.Equal(a, sliceb))

}

输出:


true


查看完整回答
反对 回复 2022-09-05
  • 3 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号