簡體   English   中英

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

[英]Golang: print string array in an unique way

我想要一個函數func format(s []string) string這樣對於兩個字符串切片s1s2 ,如果reflect.DeepEqual(s1, s2) == false ,則format(s1) != format(s2)

如果我只是使用fmt.Sprint ,則切片["a", "b", "c"]["ab", "c"]都被打印為[abc] ,這是不可取的; 並且還存在string([]byte('4', 0, '2'))具有與"42"相同的表示的問題。

使用顯示數據結構的格式動詞,如%#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"}

你可以使用:

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM