Tag: 去反思

如何在Go中获得一个函数的名字?

给定一个函数,是否有可能得到它的名字? 说: func foo() { } func GetFunctionName(i interface{}) string { // … } func main() { // Will print "name: foo" fmt.Println("name:", GetFunctionName(foo)) } 我被告知runtime.FuncForPC会有帮助,但我不明白如何使用它。

使用reflection,你如何设置一个struct字段的值?

有一个艰难的时间使用reflect包使用struct字段。 特别是还没有想出如何设置字段值。 键入t struct {fi int; fs string} var rt = t {123,“jblow”} var i64 int64 = 456 得到领域的名字我 – 这似乎工作 var field = reflect.TypeOf(r).Field(i).Name 获得领域我的价值作为一个)interface {},b)int – 这似乎工作 var iface interface{} = reflect.ValueOf(r).Field(i).Interface() var i int = int(reflect.ValueOf(r).Field(i).Int()) 设置领域的价值 – 尝试一个恐慌 reflect.ValueOf(r).Field(i).SetInt( i64 ) 恐慌 :reflect.Value·SetInt使用取得的值使用未导出的字段 假设它不喜欢字段名称“id”和“name”,所以改名为“Id”和“Name” a)这个假设是否正确? b)如果正确,认为没有必要,因为在相同的文件/包 设置字段i的值 – 尝试两个(字段名称大写) – 恐慌 […]