代码如下:
```go
package main
import (
"reflect"
"fmt"
)
type Student struct {
age int
name string
}
func getSliceStructName(i interface{}) string {
// 这里我想获取数组里面的结构体类型名
s := reflect.TypeOf(i).String()
return s
}
func main() {
stuArr := []Student{}
s := getSliceStructName(&stuArr)
fmt.Print(s)
// 期望返回字符串: Student
// 结果返回字符串:*[]main.Student
}
```
更多评论
由于传入的参数加了取地址符,所以将s := reflect.TypeOf(i).String()改成s := reflect.TypeOf(i).Elem().Elem().Name()
#2
感谢回复,通过两次 Elem().Elem() 确实能指向 main.Student,原理还没弄明白,按照 golang 对于反射的定义,这相当于做了两次指针操作,但是为何就指向了里面的元素?而 ValueOf 则不能。
#3