从struct传递给函数的名称

时间:2015-04-15 19:01:51

标签: go

如何获取结构/接口的名称?

PKG

package crud

type User struct {
    ID          uint
    Name        string
    Email       string
}

package main

import "./crud"

func get_struct(value interface{}){
    // print "User"
}

func main(){
    get_struct(&crud.User{})
}

1 个答案:

答案 0 :(得分:1)

reflect包提供了这个;您只需从变量中创建一个新的reflect.Value并检查其类型:

func get_struct(value interface{}){
    var name string
    ref := reflect.ValueOf(value)
    if ref.IsValid() {
        name = ref.Type().Name()
    } else {
        name = "nil"
    }
    fmt.Println(name)
}

注意:如果传递指针,您可能无法获得所需的输出。您可以考虑使用Type.String()而不是Type.Name()

Playground