1 回答

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊
這個(gè)問題跟你想的不太一樣;該protobuf
包隨機(jī)選擇一個(gè)空格或\u00a0
在輸出錯(cuò)誤時(shí)(我相信它基于二進(jìn)制的哈希)。你可以在這里看到這個(gè):
// Deliberately introduce instability into the error message string to
// discourage users from performing error string comparisons.
if detrand.Bool() {
return "proto: " // use non-breaking spaces (U+00a0)
} else {
return "proto: " // use regular spaces (U+0020)
}
所以你遇到的問題是故意的,旨在防止用戶做你正在嘗試的事情(依賴于保持不變的錯(cuò)誤)。你只有在更改測(cè)試時(shí)才會(huì)看到它(我猜,不是每次更改它時(shí))的原因是它Go
會(huì)緩存測(cè)試結(jié)果(默認(rèn)情況下,測(cè)試僅在發(fā)生更改時(shí)運(yùn)行)。
關(guān)于你能做些什么,我首先建議考慮這個(gè)測(cè)試是否真的有必要。軟件包作者特別指出錯(cuò)誤不穩(wěn)定,因此在google.golang.org/protobuf/proto
發(fā)布新版本時(shí),以這種方式進(jìn)行比較可能會(huì)中斷。
包測(cè)試通過調(diào)用(例如這里protobuf
)來解決這個(gè)問題。您不能這樣做,因?yàn)閕s under and, as such, not accessible。detrand.Disable()
google.golang.org/protobuf/internal/detrand
internal
如果您真的想解決這個(gè)問題,最簡(jiǎn)單的方法可能是strings.Contains
。
- 1 回答
- 0 關(guān)注
- 645 瀏覽
添加回答
舉報(bào)