簡體   English   中英

比較Go中的多個struct字段

[英]Comparing multiple struct fields in Go

我想知道是否有一種通用的單元測試相當大的結構的值的方法,而不必寫下很多if語句。 我知道在Go中我們可以使用表驅動的單元測試,但我還沒有找到如何使用結構來實現這種表驅動的方法。

我的目標是創建一個結構,用它做一些事情,並對結構的新值進行單元測試。 有沒有人知道如何通過表驅動測試實現這一目標,或者是否有更好的方法來實現它?

如果您需要檢查所有字段,只需比較結構:

type S struct {
    A int
    B float64
}

func main() {
    fmt.Println(S{1, 3.14} == S{1, 3.14}) // Prints true.
}

請注意,如果你的結構包含指針,那可能會變得棘手,因為它們可能指向兩個不同但相等的值。 在這種情況下,您可以使用reflect.DeepEqual

type S2 struct {
    A int
    B *float64
}

func main() {
    var f1, f2 = 3.14, 3.14
    // Prints false because the pointers differ.
    fmt.Println(S2{1, &f1} == S2{1, &f2})
    // Prints true.
    fmt.Println(reflect.DeepEqual(S2{1, &f1}, S2{1, &f2}))
}

游樂場: http//play.golang.org/p/G24DbRDQE8

任何比這更好的東西很可能要求你定義自己的平等方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM