我試圖檢查結構中的字段是否設置爲其零值與reflect.DeepEqual
。我們的想法是,如果是的話,我可以給出一個結構標籤像下面的一個默認改變其值:golang DeepEqual和reflect.Zero
type struct {
A int `default:"42"`
}
我的問題是這樣的:它看起來像reflect.DeepEqual
總是返回我false
。我想我錯過了一些東西。這裏是什麼,我試圖做一個簡單的例子:
package main
import (
"fmt"
"reflect"
)
func main() {
s := struct{ A int }{0}
field := reflect.ValueOf(s).Field(0)
fmt.Println(field.Interface())
fmt.Println(reflect.Zero(field.Type()))
fmt.Println(reflect.DeepEqual(field.Interface(), reflect.Zero(field.Type())))
}
這裏是代碼的去操場以上版本:https://play.golang.org/p/k9VY-2Dc69
我想知道爲什麼DeepEqual
在該返回false
案件。
謝謝!
這種快速的回答非常感謝! – jaimelescornichons
我想這個答案比我的好一點。在我的操場上,我做了一個稍微複雜的轉換來獲得一個int,而轉換爲接口是,我認爲這是正確的方式。 –
@BjornRoche如果你打算使用這個數字,'Value.Int()'可能是一個更好的選擇(因爲它處理更多的類型,而類型斷言只有一個),但爲了比較,我會避免它,因爲它總是返回結果作爲'int64'類型的值,即使'Value'中包含的值是'int'類型。把它交給比較會隱式地將它打包回'interface {}',所以沒有意義。 – icza