英文:
get name from struct passed to function
问题
如何获取结构体/接口的名称?
#pkg
包crud
类型User struct {
ID uint
Name string
Email string
}
#main
包main
导入"./crud"
func get_struct(value interface{}) {
// 打印"User"
}
func main() {
get_struct(&crud.User{})
}
英文:
How to get the name of an struct/interface?
#pkg
package crud
type User struct {
ID uint
Name string
Email string
}
#main
package main
import "./crud"
func get_struct(value interface{}){
// print "User"
}
func main(){
get_struct(&crud.User{})
}
答案1
得分: 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()
。
英文:
The reflect
package provides this; you simply create a new reflect.Value
from the variable and inspect its type:
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)
}
Note: you may not get the output you want if a pointer is passed. You may want to consider using Type.String()
over Type.Name()
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论