登录
首页 >  Golang >  Go问答

无法比较字节片

来源:stackoverflow

时间:2024-03-31 20:18:37 181浏览 收藏

你在学习Golang相关的知识吗?本文《无法比较字节片》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

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

示例代码 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))
}

正确答案


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

var a = []byte("qwedsa") //这里a是长度为6的切片

var b [6]byte //这里b是长度为6的数组

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

  1. reflect.deepequal(a, b[:]) //通过从b数组获取切片

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

bytes.equal(a, b[:])

  1. 如果不需要将其用作数组,则直接将 b 创建为长度为 a 的切片。
var b = make([]byte, len(a))
bytes.equal(a, b)

这样做:

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

到这里,我们也就讲完了《无法比较字节片》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>