2014-06-21 44 views

回答

30

你想val.Type().Field(0).Name。在reflect.Type上的Field方法將返回描述該字段的結構,該結構包括名稱以及其他信息。

無法檢索表示特定字段值的reflect.Value的字段名稱,因爲這是包含結構的屬性。

+0

「有沒有辦法檢索表示parti的reflect.Value的字段名稱cular字段值「 - 爲什麼是這種情況?該字段本身不是類型和名稱的一部分嗎? – sat

+0

@sat只要具有特定字段的'reflect.Value',它就與任何其他變量沒有區別。只有結構具有關於它的字段的信息。 – nemo

+0

@sat:在你的例子中,對於任何其他字符串,「val.Field(0)」與「reflect.Value」沒有區別。它不會「記住」它是結構的一部分。 –

14

您需要獲取類型定義的字段而不是值。

http://play.golang.org/p/7Bc7MJikbJ

package main 

import "fmt" 
import "reflect" 

type A struct { 
    Foo string 
} 

func (a *A) PrintFoo(){ 
    fmt.Println("Foo value is " + a.Foo) 
} 

func main() { 
     a := &A{Foo: "afoo"} 
     val := reflect.Indirect(reflect.ValueOf(a)) 
     fmt.Println(val.Type().Field(0).Name) 
} 
+0

不錯的例子,但你的答案缺乏解釋。 – nemo

+0

@nemo fair enough :) – fabrizioM

12

隨着structs包它更的新Names方法簡單:

package main 

import (
    "fmt" 

    "github.com/fatih/structs" 
) 

type A struct { 
    Foo string 
    Bar int 
} 

func main() { 
    names := structs.Names(&A{}) 
    fmt.Println(names) // ["Foo", "Bar"] 
} 
相關問題