Golang:以独特的方式打印字符串数组
Golang: print string array in an unique way
我想要一个函数 func format(s []string) string
,这样对于两个字符串切片 s1
和 s2
,如果 reflect.DeepEqual(s1, s2) == false
,则 format(s1) != format(s2)
。
如果我简单地使用fmt.Sprint
,切片["a", "b", "c"]
和["a b", "c"]
都打印为[a b c]
,这是不可取的;还有 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]
我想要一个函数 func format(s []string) string
,这样对于两个字符串切片 s1
和 s2
,如果 reflect.DeepEqual(s1, s2) == false
,则 format(s1) != format(s2)
。
如果我简单地使用fmt.Sprint
,切片["a", "b", "c"]
和["a b", "c"]
都打印为[a b c]
,这是不可取的;还有 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]