3 回答
TA贡献1850条经验 获得超11个赞
如果你想忽略格式,你可以使用strings.Fields.
output := strings.Fields(`digraph sitemap {
"http://www.example.com/"
-> {
"http://www.example.com/foo",
"http://www.example.com/bar",
"http://www.example.com/baz"
}
}`)
actual := strings.Fields(Dot(input))
if !equal(output,actual) {
// ...
}
其中 equal 是比较两个切片的简单函数。
TA贡献1805条经验 获得超9个赞
最简单的解决方案是在指定预期输出时在测试中使用相同的缩进(与您在模板中使用的相同)。
你有:
output := `digraph sitemap {
"http://www.example.com/"
-> {
"http://www.example.com/foo",
"http://www.example.com/bar",
"http://www.example.com/baz"
}
}`
将其更改为:
output := `digraph sitemap {
"http://www.example.com/"
-> {
"http://www.example.com/foo",
"http://www.example.com/bar",
"http://www.example.com/baz"
}
}`
请注意,例如,最后一行没有缩进。当您使用原始字符串文字时,包括缩进字符在内的每个字符都是原样文字的一部分。
创建正确的、未缩进的原始字符串文字的步骤
毕竟,这完全是一个非编码问题,而是编辑器自动格式化和定义原始字符串文字的问题。一种简单的正确方法是首先编写一个空的原始字符串文字,向其添加一个空行并清除编辑器插入的自动缩进:
output := `
`
当你有这个时,在结束反引号之前复制粘贴正确的输入,例如:
output := `
digraph sitemap {
"http://www.example.com/"
-> {
"http://www.example.com/foo",
"http://www.example.com/bar",
"http://www.example.com/baz"
}
}`
最后一步,从原始字符串文字的第一行删除换行符,您将获得正确的原始字符串文字:
output := `digraph sitemap {
"http://www.example.com/"
-> {
"http://www.example.com/foo",
"http://www.example.com/bar",
"http://www.example.com/baz"
}
}`
一旦你有了这个,gofmt编辑器的运行或自动格式化就不会再混乱了。
更新:
我检查了你更新的测试结果,在你得到的结果中,第一行之后有一个空格:digraph sitemap {,第三行之后也有一个空格:-> {,但是你没有将它们添加到你的预期输出中。也可以将它们添加到您的预期输出中,或者从模板中删除这些空格!比较字符串时,它们是按字节比较的,每个字符(包括空格)都很重要。
要从模板中删除这些额外的空格:
dotTmpl := `digraph sitemap { {{- range .}}
"{{.URL}}"
-> { {{- $n := len .Anchors}}{{range $i, $v := .Anchors}}
"{{.}}"{{if eq (plus1 $i) $n}}{{else}},{{end}}{{end}}
} {{end}}
}`
注意使用{{-。这是为了修剪模板操作周围的空间,这是在Go 1.6中添加的。
TA贡献1876条经验 获得超7个赞
问题是有一个额外的空间。在那之后的格式化文本中{似乎是你的问题。您可以通过将格式字符串更改为此来修复它
`digraph sitemap {{{range .}}
"{{.URL}}"
-> {{{$n := len .Anchors}}{{range $i, $v := .Anchors}}
"{{.}}"{{if eq (plus1 $i) $n}}{{else}},{{end}}{{end}}
}{{end}}
}`
- 3 回答
- 0 关注
- 162 浏览
添加回答
举报