dqj29136 2018-06-29 00:13
浏览 76
已采纳

如何将类型传递给函数参数

ERROR: type CustomStruct is not an expression.

type CustomStruct struct {
}

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

getTypeName(CustomStruct)

How can I pass struct type to function without type instance?

This will work

getTypeName((*CustomStruct)(nil))

But I wonder if there is more simple version..

  • 写回答

1条回答 默认 最新

  • duanguan3863 2018-06-29 00:19
    关注

    You can't. You can only pass a value, and CustomStruct is not a value but a type. Using a type identifier is a compile-time error.

    Usually when a "type" is to be passed, you pass a reflect.Type value which describes the type. This is what you "create" inside your getTypeName(), but then the getTypeName() will have little left to do:

    func getTypeName(t reflect.Type) string {
        return t.Name()
    }
    
    // Calling it:
    getTypeName(reflect.TypeOf(CustomStruct{}))
    

    (Also don't forget that this returns an empty string for anonymous types such as []int.)

    Another way is to pass a "typed" nil pointer value as you did, but again, you can just as well use a typed nil value to create the reflect.Type too, without creating a value of the type in question, like this:

    t := reflect.TypeOf((*CustomStruct)(nil)).Elem()
    fmt.Println(t.Name()) // Prints CustomStruct
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部