猿问

将接口{}转换为特定类型

我正在开发将接收 JSON 的 Web 服务。Go 转换类型过于严格。


所以,我没有下面的函数转换interface{}中bool


func toBool(i1 interface{}) bool {

    if i1 == nil {

        return false

    }

    switch i2 := i1.(type) {

    default:

        return false

    case bool:

        return i2

    case string:

        return i2 == "true"

    case int:

        return i2 != 0

    case *bool:

        if i2 == nil {

            return false

        }

        return *i2

    case *string:

        if i2 == nil {

            return false

        }

        return *i2 == "true"

    case *int:

        if i2 == nil {

            return false

        }

        return *i2 != 0

    }

    return false

}

我认为,功能还不够完善,我需要的功能转换interface{}中string,int,int64,等


所以我的问题:是否有库(函数集)Go可以转换interface{}为某些类型


更新


我的 Web 服务接收 JSON。我解码它,map[string]interface{}我无法控制那些编码它的人。


所以我收到的所有值都是interface{}并且我需要将它转换为某些类型的方法。


所以它可能是nil, int, float64, string, [...],{...}我希望把它转换成它应该是的样子。例如int, float64, string, []string,map[string]string处理所有可能的情况,包括nil, 错误值等


更新2


我收到{"s": "wow", "x":123,"y":true}, {"s": 123, "x":"123","y":"true"}, {a:["a123", "a234"]},{}


var m1 map[string]interface{}

json.Unmarshal(b, &m1)

s := toString(m1["s"])

x := toInt(m1["x"])

y := toBool(m1["y"])

arr := toStringArray(m1["a"])


开心每一天1111
浏览 198回答 2
2回答

胡子哥哥

快速/最佳方式是在时间执行中“投射”(如果您知道对象):例如package main    import "fmt"    func main() {    var inter (interface{})    inter = "hello"    var value string    value = inter.(string)    fmt.Println(value)}
随时随地看视频慕课网APP

相关分类

Go
我要回答