2014-06-09 28 views
5

Tüm yapıları bir paketin altında ad veya arabirim biçiminde listeleyebilir miyiz? gibi:Golang'da bir paketin altındaki tüm yapıları nasıl alabilirim?

struct := list("fmt") 

beklenen sonucu: (: hg clone https://code.google.com/p/go/ hangi you can clone) ve ast.StructType izole

Formatter 
GoStringer 
Scanner 
State 
Stringer 
+3

olası yinelenen [Nasıl golang tüm tanımlı yapı alınır? ] (http://stackoverflow.com/questions/20803758/how-to-get-all-defined-struct-in-golang) – LinearZoetrope

+1

Go, bu tür yansıma sağlamaz. Sembol adları ve genellikle kullanmadığınız şeyler hakkında varsayımlarda bulunamazsınız. – fuz

cevap

2

yapabileceğiniz en iyi go sources ayrıştırmak olduğunu.

ne pretty printer does olduğu sonucunu verir: linter go/lintin lint.go aynısını yapar aynı fikri olarak

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; 

: ait

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

Bu şekilde, ama gerçekten kirli ve gayri resmi görünüyor. –

+0

@AnthonyTsang no, linter yapıları listelemek için resmi yolu kullanır. Bu "kirli" değil, bu, http://stackoverflow.com/a/22222911/6309 adresinde açıklandığı gibi, dilin nasıl yapıldığının bir sonucudur. – VonC

+1

belki de daha fazla kullanım durumumu genişletmeliyim. Ben hemen hemen her şeyi yapmamı sağlayan çok dinamik PHP'denim. Bu yüzden Golang'da yapabilirsem yaralıyorum. Bir paket altındaki tüm yapıları listelemek ve bunları başlatmak ve kullanmak istiyorum. Benim kullanım durumum tam olarak "Başlangıçta kolay görünen şey hata ayıklama ve bakım kabusunda sona erecektir". Bu yüzden burada durup tekrar tasarlamam gerekiyor. –

İlgili konular