我有一个返回interface
的函数,有时我的函数应该返回nil。但我想返回所请求类型的nil
。
我通过创建另一个函数来处理此问题。
func GetNilOfType(needType string) interface{}{
switch needType {
case "string":
return ""
case "int":
case "int32":
case "int64":
return 0
case "float32":
case "float64":
return 0.0
//... other types
}
return nil
}
我的问题:是否有一个core function
来处理它,还是应该创建自己的函数?ps。对不起,我的表情很复杂。我希望你明白我的意思:)
最佳答案
没有标准库函数可用于指定为字符串名称的类型。您可以使用icza注释中建议的示例值和reflect.Zero:
func GetNilOfType(valueOfType interface{}) interface{}{
return reflect.Zero(reflect.TypeOf(valueOfType)).Interface()
}
这样称呼它:x := GetNilOfType(int32(123))
Run it on the playground。您将需要编写自己的函数以按名称指定类型。在实现中使用 map :
var zeros = map[string]interface{}{
"string": "",
"int16": int16(0),
"int8": int8(0),
"int": int(0),
"int32": int32(0),
"int64": int64(0),
// ... and so on
}
func GetNilOfType(name string) interface{} {
x, ok := zeros[name]
if !ok {
panic("oops")
}
return x
}
以上所有内容都不比使用文字作为类型的零更好:x := int32(0)
y := (*MyType)(nil)
...
关于go - 从核心函数获取未知类型的nil值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64203391/