2014-05-07 9 views
15

क्या संरचना के किसी क्षेत्र पर प्रतिबिंबित करना संभव है, और इसके टैग मानों का संदर्भ प्राप्त करना संभव है?गोलांग प्रतिबिंब: संरचना क्षेत्र से टैग प्राप्त करें

उदाहरण के लिए:

type User struct { 
    name string `json:name-field` 
    age  int 
} 
... 
user := &User{"John Doe The Fourth", 20} 
getStructTag(user.name) 
... 
func getStructTag(i interface{}) string{ 
    //get tag from field 

} 

मैं क्या देख सकते हैं से, यह करने के लिए हमेशा की तरह typ.NumField() पर लेकर, और फिर field.Tag.Get ("टैगनाम") कहते हैं। हालांकि, मेरे उपयोग के मामले में, यह पूरी संरचना को पारित करने के लिए बेहतर होगा। कोई विचार?

+0

आप नाम से फ़ील्ड भी प्राप्त कर सकते हैं। संरचना पास करने में क्या गलत है? यदि आप संरचना पास नहीं करते हैं, तो आप इस प्रकार को प्राप्त करने का इरादा कैसे रखते हैं? – JimB

उत्तर

32

आपको पूरी संरचना में पास करने की आवश्यकता नहीं है, लेकिन फ़ील्ड में से किसी एक के मूल्य में गुजरना पर्याप्त नहीं है। आपके उदाहरण में user.name सिर्फ string है - प्रतिबिंबित पैकेज के पास मूल संरचना पर वापस सहसंबंध करने का कोई तरीका नहीं होगा।

इसके बजाय, आप भी क्षेत्र के लिए reflect.StructField के आसपास पारित करने के लिए की जरूरत है:

field, ok := reflect.TypeOf(user).Elem().FieldByName("name") 
… 
tag = string(field.Tag) 

देखें http://play.golang.org/p/G6wxUVVbOw

(ध्यान दें, हम Elem ऊपर उपयोग करें, क्योंकि user एक struct के लिए सूचक है)।

संबंधित मुद्दे