go - 从核心函数获取未知类型的nil值

标签 go

我有一个返回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/

相关文章:

authentication - 用于 golang 应用程序的 Keycloak 适配器

templates - 如何在 hugo go 模板中使用 asciidocify 而不是 markdownify?

go - 如何使用构建器模式构造动态实现接口(interface)的结构

go - 使用 godoc 启动本地文档服务器时出现问题

json - Golang 返回嵌套的 JSON

go - RabbitMQ 循环法

go - 在一系列系统调用中是否有更简洁的错误处理方式?

go - 如何减少与从 JSON 解码动态类型并发送到相关 channel 相关的重复代码?

go - 通过来自 channel 值的指针分配给局部变量

go - 命令行参数 : handling "undefined" error message