Golang:以独特的方式打印字符串数组

我想要一个函数func format(s []string) string,以便两个字符串切片s1s2,如果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"


慕斯709654
浏览 411回答 2
2回答

猛跑小猪

使用显示数据结构的格式动词,例如%#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"}

慕盖茨4494581

您可以使用:func format(s1, s2 []string) string {    if reflect.DeepEqual(s1, s2) {        return "%v\n"    }    return "%q\n"}像这个工作样本(The Go Playground):package mainimport (    "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]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go