2016-03-23 16 views
-1

Dies kann Reflexion erfordern, aber ich bin mir nicht sicher. Ich versuche, ein Array von erforderlichen Feldern in einer Struktur durchzulaufen. Wenn eines dieser Felder gleich Null ist, möchte ich im Wesentlichen einen Fehler auslösen. Ich habe die Grundform nach unten bekam aber ich merkte, ich weiß nicht, wie in Go eine Struktur Feldnamen über einen variabel passierenGolang Variable Struct Feld

stellen Sie sich eine Struktur namens emailtemplate und es hat so genannte Feld template_id

in diesem Fall möchte ich wissen, ob EmailTemplate.TemplateId ist null

emailDef.Fields ist ein String-Array [ „TemplateID“]

ich möchte überprüfen, ob diese Felder in der Struktur sind emailtemplate und wenn sie gleich Null

for field := range emailDef.Fields { 
     fmt.Println(emailDef.Fields[field]) 
     if EmailTemplate.[emailDef.Fields[field]] == nil { 
      missingField := true 
     }   
    } 

ist in der Linie von dem, was ich denke, aber ich weiß, dass das falsch ist, da eine Struktur kein Array ist. emailDef.Fields [Feld] wäre äquivalent zu TemplateId

Antwort

1

Ihre Schleife Sachen macht mir nicht viel Sinn, also gebe ich ein allgemeines Beispiel mit einem einzelnen Feld in einer Zeichenfolge namens field. Wenn Sie ein Segment oder Array von Feldern haben, nach denen Sie suchen möchten, sollten Sie einen Bereich über dem aktuellen Wert für field verwenden.

import "reflect" 

st := reflect.TypeOf(EmailTemplate) 
v, ok := st.FieldByName(field) 
if ok { 
    // field existed on EmailTemplate, now check if it's nil 
    if v.IsNil() { 
     // the field field on instance EmailTemplate was nil, do something 
    } 
} 

Jetzt vorausgesetzt, Sie haben eine Liste von Feldern müssen Sie prüfen, werden alle Nicht-Null, dann fügen Sie einfach eine Schleife wie so;

for field := range requiredFields { 
    st := reflect.TypeOf(EmailTemplate) 
    v, ok := st.FieldByName(field) 
    if ok { 
     // field existed on EmailTemplate, now check if it's nil 
     if v.IsNil() { 
      // the field field on instance EmailTemplate was nil, do something 
      // maybe raise error since the field was nil 
    } else { 
     //the field wasn't found at all, probably time to raise an error 
    } 
    } 
} 

reflect Paket Dokumente sind hier; https://golang.org/pkg/reflect/

Verwandte Themen