首页 > 解决方案 > 如何将结构转换为基本类型,而不是 Go 中的直接类型?

问题描述

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

例子

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

在这个例子中:

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

标签: gostructreflectioncasting

解决方案


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)
}

NBtype B = A使演员能够工作。


推荐阅读