我的問題很簡單,我用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
- 1 回答
- 0 關注
- 141 瀏覽
添加回答
舉報
0/150
提交
取消