【发布时间】:2021-11-18 11:40:27
【问题描述】:
你有这个函数来获取值的类型,但是我尝试了这个并且永远不能得到 reflect.struct:
type Test struct {
Code int
Name string
}
func main(){
test := getTest()
data, err := getBytes(slice...)
sanitizedFile := bytes.Split(data, []byte("\r\n"))
err = Unmarshal(sanitizedFile[0], &test)
}
func getTest() interface{} {
return Test{}
}
使用此代码,我无法从 Unmarshall func 中的 v 参数获取reflect.struct
func Unmarshal(data []byte, v interface{}) error {
rv := reflect.ValueOf(v)
if rv.Kind() == reflect.Ptr {
rvElem := rv.Elem()
switch rvElem.Kind() {
case reflect.Struct:
// implement me
}
}
return ErrInvalid
}
我想知道我是否能以某种方式找出接口是否属于结构类型或访问该结构的值。
【问题讨论】:
-
您正在传递一个指向接口 (
*interface{}) 的指针,因此,我相信您需要 两个Elem调用。 -
请注意
*interface{}{struct{...}}与interface{}{*struct{...}}不一样,实际上完全不同。使用指向接口的指针而不是指向结构的指针可能会破坏您的解组实现。 -
如果给定的输入可以是指针(甚至多个)和接口的混合,则可以使用循环调用
Elem:play.golang.org/p/a4h1gBR2Xri
标签: go struct reflection