Golang 使用反射将 inteface{} 转为 struct{}

如果是仅想知道如何将 interface{} 转化为 struct{} 的话, 代码如下:


interface.(*Struct)

使用反射转的话,先用 reflect.ValueOf 来获取 interfacevalue, 然后使用 Interface() 来获取 interface。 如下:


type Human interface {
	Name() string
	Type() string
}

type Martian struct {
	name string
	id   int
}

func (m *Martian) Name() string {
	return m.name
}

func (m *Martian) Type() string {
	return "martian"
}

func TestHuman(t *testing.T) {
	var human Human

	human = &Martian{
		name: "Jack",
		id:   1,
	}

	t.Log(human.Name())

	// convert interface{} to struct{}
	obj := reflect.ValueOf(human)
	martian := obj.Interface().(*Martian)
	t.Log(martian.id)
}