如何将结构转换为基本类型,而不是Go中的立即类型?

时间:2018-09-23 02:22:23

标签: go struct reflection casting

我需要将未知立即类型的接口转换为已知基本类型。

示例

package main

import (
    "fmt"
    "reflect"
)

type A struct {
    foo string
}

type B A

func main() {
    bS := B{foo: "foo"}
    bI := reflect.ValueOf(bS).Interface()
    fmt.Println(bI)

    aS := bI.(A)
    fmt.Println(aS)
}

运行此代码后,可以理解,它会出现以下消息,从而引起恐慌

panic: interface conversion: interface {} is main.B, not main.A

在此示例中:

  • 对于接收接口bI的代码,类型B是未知的
  • B型是 保证是已知的类型A的别名。

编辑:我不能在此处使用类型别名,因为这意味着类型B将成为写类型A的另一种方式,因此我将失去在上定义的所有自定义方法B型。

2 个答案:

答案 0 :(得分:0)

您可以使用type aliasing(在Go1.9中发布)解决此问题。

package main

import (
    "fmt"
    "reflect"
)

type A struct {
    foo string
}

type B = A

func main() {
    bS := B{foo: "foo"}
    bI := reflect.ValueOf(bS).Interface()
    fmt.Println(bI)

    aS := bI.(A)
    fmt.Println(aS)
}

type B = A的目的是使演员表能够正常工作。

答案 1 :(得分:0)

我知道转到第一个结构的唯一方法是aS := A(bI.(B))反转过程。希望对您有帮助