2 回答

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
帶結(jié)構(gòu)
您可以通過(guò)將結(jié)果存儲(chǔ)在可比較的結(jié)構(gòu)值中來(lái)稍微改進(jìn)它:
type Result struct {
a, b, c int
}
并使用它:
p, q := Result{}, Result{}
p.a, p.b, p.c = a()
q.a, q.b, q.c = b()
fmt.Println(p == q)
帶數(shù)組
或者您可以使用數(shù)組(與切片不同,數(shù)組也具有可比性),盡管這不會(huì)更短,但您不需要為此使用新類(lèi)型:
x, y := [3]int{}, [3]int{}
x[0], x[1], x[2] = a()
y[0], y[1], y[2] = b()
fmt.Println(x == y)
一般解決方案(使用reflect)
可以使用該reflect包構(gòu)建通用解決方案。這基本上調(diào)用了兩個(gè)函數(shù),并比較所有結(jié)果值。省略了錯(cuò)誤檢查!
func check(v1, v2 reflect.Value) bool {
r1 := v1.Call(nil)
r2 := v2.Call(nil)
if len(r1) != len(r2) {
return false
}
for i, a := range r1 {
if a.Interface() != r2[i].Interface() {
return false
}
}
return true
}
并使用它:
fmt.Println(check(reflect.ValueOf(a), reflect.ValueOf(b)))
在Go Playground上試試這些。

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
這可能不是您想要的,但是如果您返回結(jié)構(gòu)體而不是返回三個(gè)未命名的整數(shù),則可以直接比較它們。例如
type XYZ struct{ X, Y, Z int }
func f() XYZ { return XYZ{1, 2, 3} }
func g() XYZ { return XYZ{1, 2, 3} }
func main() {
fmt.Println(f() == g())
// Output:
// true
}
游樂(lè)場(chǎng):http : //play.golang.org/p/zFXPqPjTtZ。
- 2 回答
- 0 關(guān)注
- 184 瀏覽
添加回答
舉報(bào)