这个游乐场说明了我的问题。
基本上我有一个接受空接口作为参数的函数。我想传入任何内容并打印有关类型和值的信息。
它按预期工作,除非我将指针传递给自定义类型(在我的示例中,底层结构类型)。我不完全确定反射模型在那时是如何构建的。由于函数签名指定了一个interface{}参数,当我调用reflect.Indirect(v).Kind()它时自然会返回,interface但我想知道调用函数时的类型。
以下是来自操场的相同代码:
package main
import (
"fmt"
"reflect"
)
func main() {
var s interface{}
s = CustomStruct{}
PrintReflectionInfo(s)
PrintReflectionInfo(&s)
}
type CustomStruct struct {}
func PrintReflectionInfo(v interface{}) {
// expect CustomStruct if non pointer
fmt.Println("Actual type is:", reflect.TypeOf(v))
// expect struct if non pointer
fmt.Println("Value type is:", reflect.ValueOf(v).Kind())
if reflect.ValueOf(v).Kind() == reflect.Ptr {
// expect: CustomStruct
fmt.Println("Indirect type is:", reflect.Indirect(reflect.ValueOf(v)).Kind()) // prints interface
// expect: struct
fmt.Println("Indirect value type is:", reflect.Indirect(reflect.ValueOf(v)).Kind()) // prints interface
}
fmt.Println("")
}
慕容3067478
UYOU
相关分类