在表驅動的測試中,斷言兩個映射的相等性至關重要。雖然自訂實作和字串轉換可能很麻煩,但 Golang 提供了內建解決方案。
reflect 套件提供了 DeepEqual 函數,可以遞歸比較值(包括映射)。它檢查:
import "reflect" eq := reflect.DeepEqual(m1, m2)
這種全面的比較確保準確的相等測試任何類型的映射(例如,map[string]bool、map[struct{}]interface{})。請注意,它需要介面類型作為參數。
reflect.DeepEqual 的 Map 案例的源代碼揭示了:
if p, ok := v1.(reflect.Map); ok && q, ok := v2.(reflect.Map) { if p.Len() != q.Len() { return false } for _, k := range p.Keys() { if !q.Has(k) || !DeepEqual(p.Elem(k).Interface(), q.Elem(k).Interface()) { return false } } return true }
它驗證 nil 值、map 長度和鍵值對。透過傳遞介面類型,確保與各種映射實現的兼容性。
在Golang中使用reflect.DeepEqual測試映射相等性是一種慣用且高效的解決方案。它可以處理所有邊緣情況並確保對任何類型的地圖進行準確比較。這簡化了表驅動測試並增強了程式碼的可靠性。
以上是如何測試 Golang 中的映射的等價性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!