Gewusst wie: abrufen von Daten in das Formular (als array)

Ich bin ein PHP-Dev. Aber derzeit bewegen zu Golang... ich versuche Sie zum abrufen von Daten aus einem Formular (Post-Methode):

<!-- A really SIMPLE form -->
<form class="" action="/Contact" method="post">
  <input type="text" name="Contact[Name]" value="Something">   
  <input type="text" name="Contact[Email]" value="Else">
  <textarea name="Contact[Message]">For this message</textarea>
  <button type="submit">Submit</button>
</form>

In PHP würde ich einfach die Verwendung dieser Daten zu erhalten:

<?php 
   print_r($_POST["Contact"])
?>
//Output would be something like this:
Array
(
    [Name] => Something
    [Email] => Else
    [Message] => For this message
)

ABER in go... entweder ich bekomme eins oder die ganze Sache aber nicht den Kontakt [] - Array nur wie PHP

Ich dachte an 2 Lösungen:

1) Holen Sie sich eins nach dem anderen:

//r := *http.Request
err := r.ParseForm()

if err != nil {
    w.Write([]byte(err.Error()))
    return
}

contact := make(map[string]string)

contact["Name"] = r.PostFormValue("Contact[Name]")
contact["Email"] = r.PostFormValue("Contact[Email]")
contact["Message"] = r.PostFormValue("Contact[Message]")

fmt.Println(contact)

//Output
map[Name:Something Email:Else Message:For this Message]

Beachten Sie, dass die Karte die Schlüssel sind der ganzen: "Wenden Sie sich an[Name]"...

2) Auswahl ganze Karte r.Form und "analysieren|zu erhalten", die diese Werte mit Präfix
"Wenden Sie sich an[" und dann wieder "Kontakt[" und "]" mit einem leeren string
also ich kann das Form-array-Key ist, nur wie das PHP-Beispiel

Ging ich für diese Arbeit durch meine eigene, aber... angefangen über die ganze form nicht unbedingt eine gute Idee (?)

//ContactPost process the form sent by the user
func ContactPost(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
    err := r.ParseForm()

    if err != nil {
        w.Write([]byte(err.Error()))
        return
    }

    contact := make(map[string]string)

   for i := range r.Form {
       if strings.HasPrefix(i, "Contact[") {
           rp := strings.NewReplacer("Contact[", "", "]", "")
           contact[rp.Replace(i)] = r.Form.Get(i)
       }
   }

    w.Write([]byte(fmt.Sprint(contact)))
}
//Output
map[Name:Something Email:Else Message:For this Message]

Beide Lösungen geben Sie mir die gleiche Ausgabe... Aber im 2. Beispiel brauche ich nicht unbedingt zu wissen, die Tasten "Kontakt[]"

Ich weiß... ich kann einfach nur vergessen, dass die "Form " Array" und nutzen name="Email" auf meine Eingaben und abrufen, aber... ich habe die durch einige Szenarien, in denen ich mit EINER form, die mehr als 2 arrays von Daten und verschiedene Dinge tun mit jedem, wie ORMs

Frage 1: gibt es einen einfacheren Weg, um meine Form Array als eine tatsächliche Karte in Golang, wie PHP funktioniert?

Frage 2: Sollte ich wieder an die Daten, die man durch eine (Mühsame so viel und ich kann ändern die Form-Daten an und irgendwann neu kompilieren,...) oder die Iteration der ganzen Sache, wie ich es getan habe in dem 2. Beispiel.

Sorry für mein schlechtes Deutsch... vielen Dank im Voraus!

  • stackoverflow.com/questions/23713817/...
  • Nee, das hilft nicht... Beachten Sie meine Formular-Daten-array unabhängige Tasten, auch wenn es keine Tasten, keine Möglichkeit, richtig zu identifizieren, die einem entsprechen, die man...
  • Sie können ganz einfach schreiben Sie Ihre eigene form-parser durchläuft alle Schlüssel in der form, und die Gruppen "Name[Schlüssel]" Felder in einem sub-Wörterbuch.
  • Da ich nicht finden konnte, so etwas, das ist ziemlich viel, was ich Tat, meine eigene func... Gut werde ich machen, eine Struktur für das speichern der analysierten form und verwenden Sie es wie ich brauchen
Schreibe einen Kommentar