从传递给函数的结构体中获取名称。

huangapple go评论89阅读模式
英文:

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()

Playground

英文:

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().

Playground

huangapple
  • 本文由 发表于 2015年4月16日 03:01:50
  • 转载请务必保留本文链接:https://go.coder-hub.com/29658629.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定