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

String Golang:以独特的方式打印字符串数组,string,go,format,slice,String,Go,Format,Slice,我想要一个函数func格式(s[]string)字符串,这样对于两个字符串片段s1和s2,如果反映.DeepEqual(s1,s2)==false,那么格式(s1)!=格式(s2) 如果我只是使用fmt.Sprint,那么切片[“a”、“b”、“c”]和[“a b”、“c”]都打印为[a b c],这是不可取的;还有一个问题是字符串([]字节('4',0',2'))具有与“42”相同的表示形式使用显示数据结构的格式动词,如%\v。在这种情况下,%q也可以很好地工作,因为原语类型都是字符串 fmt

我想要一个函数
func格式(s[]string)字符串
,这样对于两个字符串片段
s1
s2
,如果
反映.DeepEqual(s1,s2)==false
,那么
格式(s1)!=格式(s2)


如果我只是使用
fmt.Sprint
,那么切片
[“a”、“b”、“c”]
[“a b”、“c”]
都打印为
[a b c]
,这是不可取的;还有一个问题是
字符串([]字节('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格式(s1,s2[]字符串)字符串{
如果反射深度相等(s1、s2){
返回“%v\n”
}
返回“%q\n”
}
就像这个工作示例():

主程序包
进口(
“fmt”
“反映”
)
func main(){
s1,s2:=[]字符串{“a”,“b”,“c”},[]字符串{“a b”,“c”}
frmat:=格式(s1,s2)
格式打印F(frmat,s1)/[“a”“b”“c”]
格式打印F(frmat,s2)/[“a b”“c”]
s2=[]字符串{“a”、“b”、“c”}
frmat=格式(s1,s2)
格式打印F(frmat,s1)/[“a”“b”“c”]
格式打印F(frmat,s2)/[“a b”“c”]
}
func格式(s1,s2[]字符串)字符串{
如果反射深度相等(s1、s2){
返回“%v\n”
}
返回“%q\n”
}
输出:

["a" "b" "c"]
["a b" "c"]
[a b c]
[a b c]

你的答案太长了,而且(也许不必要)说明性很强,即使问题需要一个简短的答案,可能需要1-2行代码。尽管如此,我还是投票表示没有冒犯,因为我从你的其他答案中学到了很多。哈,这是一个非常好的解决方案——我应该仔细阅读。谢谢