Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在golang中使用反射来获取用户定义类型的底层类型?_Go - Fatal编程技术网

是否可以在golang中使用反射来获取用户定义类型的底层类型?

是否可以在golang中使用反射来获取用户定义类型的底层类型?,go,Go,我有这种类型: type T string 我可以获取T对象的基础类型吗?例如: package main import ( "fmt" "reflect" ) type T string func main() { var t = T("what") tt := reflect.TypeOf(t) fmt.Println(tt) // prints T, i need string } 你可以打电话,这会给你一个 如果你不知道它是否是指针,你需

我有这种类型:

type T string
我可以获取
T
对象的基础类型吗?例如:

package main

import (
    "fmt"
    "reflect"
)

type T string

func main() {
    var t = T("what")
    tt := reflect.TypeOf(t)
    fmt.Println(tt) // prints T, i need string
}
你可以打电话,这会给你一个

如果你不知道它是否是指针,你需要额外的检查和调用

你可以打电话,这会给你一个

如果你不知道它是否是指针,你需要额外的检查和调用

不完全是“基础类型”,但对于您的案例,您不希望它,您希望它来自:

可播放示例:

请注意,Kind与“底层类型”不是同义词,而“底层类型”并不是一个真正的东西,正如您在这里所看到的:

不完全是“底层类型”,但对于您的情况,您不希望它,您希望它来自:

可播放示例:


注意,Kind与“底层类型”并不是同义词,而“底层类型”并不是一个真正的东西,正如您在这里看到的:

如果
t
属于
*t
类型,那么我仍然可以访问“底层类型”吗?i、 e.
string
和not
ptr
是。看见如果
t
属于
*t
类型,我仍然可以访问“基础类型”吗?i、 e.
string
和not
ptr
是。看见请参阅相关:。请参阅相关:。
fmt.Println(tt.Kind()) // prints string
var kind reflect.Kind 
if tt.Kind() == reflect.Ptr {
    kind = tt.Elem().Kind()
} else {
    kind = tt.Kind()
}
fmt.Println(kind)
var t = T("what")
k := reflect.TypeOf(t).Kind()
fmt.Println(k)