2014-06-09 7 views
5

क्या हम पैकेज के तहत नाम या इंटरफ़ेस के रूप में सभी संरचनाओं को सूचीबद्ध कर सकते हैं? तरह:गोलांग में पैकेज के तहत मैं सभी संरचना कैसे प्राप्त कर सकता हूं?

struct := list("fmt") 

अपेक्षित परिणाम: (: hg clone https://code.google.com/p/go/ जो you can clone), और ast.StructType अलग

Formatter 
GoStringer 
Scanner 
State 
Stringer 
+3

के संभावित डुप्लिकेट [कैसे golang में सभी परिभाषित struct पाने के लिए? ] (http://stackoverflow.com/questions/20803758/how-to-get-all-defined-struct-in-golang) – LinearZoetrope

+1

गो इस तरह के प्रतिबिंब प्रदान नहीं करता है। आप प्रतीक नामों और आम तौर पर सामानों के बारे में धारणा नहीं बना सकते हैं जिनका आप वास्तव में उपयोग नहीं करते हैं। – fuz

उत्तर

2

सबसे अच्छा तुम कर सकते हो पार्स go sources है।

यही कारण है कि एक pretty printer does:

func (P *Printer) Type(t *AST.Type) int { 
    separator := semicolon; 

    switch t.form { 

    case AST.STRUCT, AST.INTERFACE: 
      switch t.form { 
      case AST.STRUCT: P.String(t.pos, "struct"); 
      case AST.INTERFACE: P.String(t.pos, "interface"); 
      } 
      if t.list != nil { 
        P.separator = blank; 
        P.Fields(t.list, t.end); 
      } 
      separator = none; 

एक ही विचार में, linter go/lint ही in lint.go करता है:

case *ast.StructType: 
     for _, f := range v.Fields.List { 
      for _, id := range f.Names { 
       check(id, "struct field") 
      } 
     } 
    } 
+0

इस तरह से, लेकिन वास्तव में गंदा और अनौपचारिक लगता है। –

+0

@ एंथनीट्संग नंबर, लिंटर संरचनाओं को सूचीबद्ध करने के आधिकारिक तरीके का उपयोग करता है। यह "गंदे" नहीं है, यह एक परिणाम है कि भाषा कैसे की जाती है, जैसा कि http://stackoverflow.com/a/22222911/6309 में बताया गया है। – VonC

+1

शायद मुझे अपने उपयोग के मामले का विस्तार करना चाहिए। मैं PHP से हूं जो इतना गतिशील है जो मुझे लगभग कुछ भी करने की अनुमति देता है। तो अगर मैं गोलांग में कर सकता हूं तो मैं घायल हो रहा था। मैं एक पैकेज के तहत सभी structs सूचीबद्ध करना चाहता हूं और उन्हें init और उनका उपयोग करें। मेरा उपयोग मामला बिल्कुल है "शुरुआत में आसान लग रहा है डीबगिंग और रखरखाव दुःस्वप्न में समाप्त हो जाएगा"। इसलिए, मुझे यहां रुकने और फिर से डिजाइन करने की आवश्यकता है। –

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

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