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

DeepEqual 以不同的方式对待用反勾初始化的数组?

DeepEqual 以不同的方式对待用反勾初始化的数组?

Go
慕森王 2022-01-04 10:58:05
我的问题很简单,我用back tick来初始化一个字符串数组,但是我发现golang对这个数组的处理方式不同:import (    "fmt"    "reflect")func main() {    x := []string{`hello world`, "me"}    y := []string{"hello", "world", "me"}    fmt.Println(x)    fmt.Println(y)    fmt.Println(reflect.DeepEqual(x, y))}输出是:[hello world me][hello world me]false这让我很困惑:我应该确保所有字符串数组都以相同的方式启动吗?
查看完整描述

1 回答

?
沧海一幻觉

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

那些是slices,而不是arrays,你的第一个 slice 有 2 个元素,第二个 slice 有 3 个元素,那么它们怎么可能相等?


尝试像这样打印它们:


fmt.Printf("%d %q\n", len(x), x)

fmt.Printf("%d %q\n", len(y), y)

输出:


2 ["hello world" "me"]

3 ["hello" "world" "me"]

fmt.Prinln()将打印传递切片的所有值,在元素之间打印一个空格。并且 of 的第一个元素x是一个字符串,它等于前 2 个y用空格连接的元素,这就是为什么您会看到切片的打印内容相同。


当您使用相同的 3 个字符串用反引号初始化第一个切片时,它们将相等:


x = []string{`hello`, `world`, "me"}

y = []string{"hello", "world", "me"}

fmt.Printf("%d %q\n", len(x), x)

fmt.Printf("%d %q\n", len(y), y)

fmt.Println(reflect.DeepEqual(x, y))

输出:


3 ["hello" "world" "me"]

3 ["hello" "world" "me"]

true


查看完整回答
反对 回复 2022-01-04
  • 1 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信