gpt4 book ai didi

go - 如何在 Go 中将类型传递给函数参数

转载 作者:IT王子 更新时间:2023-10-29 01:19:18 25 4
gpt4 key购买 nike

错误:类型 CustomStruct 不是表达式。

type CustomStruct struct {
}

func getTypeName(t interface{}) string {
rt := reflect.TypeOf(t).Elem()
return rt.Name()
}

getTypeName(CustomStruct)

如何在没有类型实例的情况下将结构类型传递给函数?

这会起作用

getTypeName((*CustomStruct)(nil))

但是我想知道有没有更简单的版本..

最佳答案

你不能。您只能传递一个值,CustomStruct 不是一个值而是一个类型。使用类型标识符是编译时错误。

通常当要传递“类型”时,您会传递一个描述该类型的 reflect.Type 值。这是您在 getTypeName() 中“创建”的内容,但是 getTypeName() 将无事可做:

func getTypeName(t reflect.Type) string {
return t.Name()
}

// Calling it:
getTypeName(reflect.TypeOf(CustomStruct{}))

(另外不要忘记,对于匿名类型,如 []int,这将返回一个空字符串。)

另一种方法是像您一样传递“类型化”nil 指针值,但同样,您也可以使用类型化的nil 值来创建 reflect.Type 也没有创​​建相关类型的值,如下所示:

t := reflect.TypeOf((*CustomStruct)(nil)).Elem()
fmt.Println(t.Name()) // Prints CustomStruct

关于go - 如何在 Go 中将类型传递给函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51097211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com