gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:27:43 24 4
gpt4 key购买 nike

我的问题很简单,我用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

这让我很困惑:我应该确保所有字符串数组都以相同的方式启动吗?

最佳答案

那些是 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()将打印传递的 slice 的所有值,打印元素之间的空格。 x 的第一个元素是一个字符串,它等于 y 的前 2 个元素加上一个空格,这就是为什么您看到 slice 的打印内容相等。

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

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

上试试这些 Go Playground .

关于arrays - DeepEqual 以不同方式对待用反勾初始化的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36566080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com