使用反射高效檢測Go 中的空值
在Go 中處理interface{} 值並需要確定它們是否未初始化時(即值為0、""、false 或nil),反射提供了一個方便的解決方案。以下是實現此目標的方法:
func IsZeroOfUnderlyingType(x interface{}) bool { return x == reflect.Zero(reflect.TypeOf(x)).Interface() }
區分兩個不同的概念至關重要:
上述函數檢定對於第二種情況,基礎價值為零。
不可比較的考慮類型
函數使用 == 運算符,這可能不適用於不可比較的類型。要解決這個問題,您可以使用 Reflect.DeepEqual() 來取代:
func IsZeroOfUnderlyingType(x interface{}) bool { return reflect.DeepEqual(x, reflect.Zero(reflect.TypeOf(x)).Interface()) }
此更新的函數將適用於所有類型,包括不可比較的類型。
以上是如何利用反射高效檢測Go介面中的零值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!