golang,使用类型断言的一个例子

type SpotPrice struct {
    ProductId        string  `db:"product_id"`   //产品id
    High             float64 `db:"high"`         //最高价
    Low              float64 `db:"low"`          //最低价
    RenewDate        string  `db:"renew_date"`   //更新时间
}
.
.
.

var pricei interface{}
var err error
pricei, err = db.GetSpotPrice(realPrice.ProductId,"","",1,1)
    if err != nil {
        logger.Warnning(err)
        continue
    }
    value := pricei.([]price.SpotPrice)
    realPrice.High = value[0].High
    realPrice.Low = value[0].Low
    realPrice.RenewDate = value[0].RenewDate

go的接口功能特别强大,空接口可以接受任何类型的变量,这不就有点类似c++的多态嘛,运行时确定,dynamic,哈哈哈


言归正传,pricei是一个空接口,db.GetSpotHistoryPrice(conf.ProductId,"","",1,1)返回的类型是[]SpotPrice,动态传给了priceivalue := pricei.([]price.SpotPrice)这句是进行类型断言,是Go语言里面的一个语法特性。这时候value就是一个真真正正的[]price.SpotPrice


引申一下,Comma-ok断言:
value, ok = element.(T),这里value就是变量的值,ok是一个bool类型,element是interface变量,T是断言的类型。


拿到了value,我就可以做任何想做的事情了,比如上述代码接下来的取值赋值。


这样用的好处,就是可以代码复用,当我接收到一个函数返回的类型是多种的,不确定的,就可以这么写,然后进行类型断言,动态绑定数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值