登录
首页 >  Golang >  Go问答

golang中无法将interface {} 分配给struct

来源:stackoverflow

时间:2024-03-14 18:09:27 147浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《golang中无法将interface {} 分配给struct》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

专家您好,我正在使用这个库将 k/v 存储在缓存中

“github.com/bluele/gcache”

我存储的值是这个数据结构

type latestblockhashcacheresult struct {
    blockhash            string `json:"blockhash"`
    lastvalidblockheight uint64 `json:"lastvalidblockheight"` // slot.
    commitmenttype  string `json:"commitmenttype"`
}
lbhr := latestblockhashcacheresult{
            blockhash:            lbh.value.blockhash.string(),
            lastvalidblockheight: lbh.value.lastvalidblockheight,
            commitmenttype:       string(commitmenttype),
        }
        gc.setwithexpire(lbh.value.lastvalidblockheight, lbhr, time.hour*10)

我检索缓存没有问题,但无法对其进行类型转换

c, _ := gc.get(rf.lastvalidblockheight)
    fmt.printf("%t\n", c)

所以当我尝试这个

var c = LatestBlockhashCacheResult{}
    c, _ = gc.Get(rf.LastValidBlockHeight)

这会引发错误

无法在多重赋值中将接口 {} 分配给 c(类型为 latestblockhashcacheresult):需要类型断言


正确答案


您正在尝试将 interface{} 分配给类型化变量。 为此,您需要首先尝试将 interface{} 值转换为特定类型

val, err := gc.Get(rf.LastValidBlockHeight)
if err != nil {
  // handle 
}

c, ok := val.(LatestBlockhashCacheResult)
if !ok {
   // val has different type than LatestBlockhashCacheResult
}

参考文献:
https://go.dev/tour/methods/15
https://go.dev/tour/methods/16

今天关于《golang中无法将interface {} 分配给struct》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>