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 關注
- 203 瀏覽
添加回答
舉報