К моему удивлению, это скомпилировано (и работает) нормально с Go 1.13:
var v interface{}
if v == "" { // false
fmt.Println("v is empty string")
}
У меня всегда было впечатление, что мне нужно сделать переключатели типа и / или утверждение, прежде чем я смогу провести такой тест , И тыкаю немного больше на Go игровую площадку :
v = 0
if v == 0 { // True
fmt.Println("v is 0")
}
type myType struct {
a string
b int
}
v = myType{}
// Only works if myType is comparable
if v == (myType{}) { // true
fmt.Println("v is empty myType")
}
Может кто-нибудь сказать мне, почему это законно? Безопасно ли полагаться на это поведение? Например, если я хочу проверить, является ли переменная пустой строкой, нулевым целым числом или числом с плавающей запятой:
func isZero(v interface{}) bool {
return v == "" || v == 0 || v == 0.0
}
Может ли это вызвать у меня проблемы?