亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang:以獨特的方式打印字符串數組

Golang:以獨特的方式打印字符串數組

Go
慕斯709654 2022-03-03 16:03:41
我想要一個函數func format(s []string) string,以便兩個字符串切片s1和s2,如果reflect.DeepEqual(s1, s2) == false,那么format(s1) != format(s2)。如果我簡單地使用fmt.Sprint, slices["a", "b", "c"]并且["a b", "c"]都打印為[a b c],這是不可取的;并且還存在與string([]byte('4', 0, '2'))具有相同表示的問題"42"。
查看完整描述

2 回答

?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

使用顯示數據結構的格式動詞,例如%#v. 在這種情況下%q也很有效,因為原始類型都是字符串。


fmt.Printf("%#v\n", []string{"a", "b", "c"})

fmt.Printf("%#v\n", []string{"a b", "c"})


// prints

// []string{"a", "b", "c"}

// []string{"a b", "c"}


查看完整回答
反對 回復 2022-03-03
?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

您可以使用:


func format(s1, s2 []string) string {

    if reflect.DeepEqual(s1, s2) {

        return "%v\n"

    }

    return "%q\n"

}

像這個工作樣本(The Go Playground):


package main


import (

    "fmt"

    "reflect"

)


func main() {

    s1, s2 := []string{"a", "b", "c"}, []string{"a b", "c"}

    frmat := format(s1, s2)

    fmt.Printf(frmat, s1) // ["a" "b" "c"]

    fmt.Printf(frmat, s2) // ["a b" "c"]


    s2 = []string{"a", "b", "c"}

    frmat = format(s1, s2)

    fmt.Printf(frmat, s1) // ["a" "b" "c"]

    fmt.Printf(frmat, s2) // ["a b" "c"]

}


func format(s1, s2 []string) string {

    if reflect.DeepEqual(s1, s2) {

        return "%v\n"

    }

    return "%q\n"

}

輸出:


["a" "b" "c"]

["a b" "c"]

[a b c]

[a b c]


查看完整回答
反對 回復 2022-03-03
  • 2 回答
  • 0 關注
  • 451 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號