登录
首页 >  Golang >  Go问答

将变量分配给“标签”类型,或者如何在指针之间进行类型转换

来源:stackoverflow

时间:2024-04-15 15:45:35 357浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《将变量分配给“标签”类型,或者如何在指针之间进行类型转换》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我有两个相同的结构,为了消除歧义,它们具有不同的类型:

type basetype struct {
   id  uint64
   name string
}

type labeledtype1 basetype
type labeledtype2 basetype

整个链中有一个函数实际上并不关心 labeledtype,它只与 basetype 一起使用(因为它对两者执行完全相同的操作)。事件的发送者必须发送标记类型,而不是基本类型,因为实际类型定义了一些后行为。

func handle(evt interface{}) error {
  switch e := evt.(type) {
  case *labeledtype1: 
    return handlebaseevent(e)
  case *labeledtype2:
    return handlebaseevent(e)
  //there are other types
  case *othertype:
      return handleothertype(e)
  } 
}

func handlebaseevent(evt *basetype) {
   //do stuff
}

现在当然无法编译:

cannot convert e (type *LabeledType1) to type BaseType

但我想知道,据我理解这个概念,这两种类型都是可分配的,所以应该有一些简单的转换?我尝试过类型转换:

evt.(basetype))

还有

basetype(e)

我无法在 basetype 内使用 bool


解决方案


使用 (*basetype)() type conversion*labeledtype1*labeledtype2 转换为 *basetype

func handle(evt interface{}) error {
    switch e := evt.(type) {
    case *LabeledType1:
        return handleBaseEvent((*BaseType)(e))
    }
    ...
}

Run it on the playground

终于介绍完啦!小伙伴们,这篇关于《将变量分配给“标签”类型,或者如何在指针之间进行类型转换》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

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