Как сделать почтовый запрос с несколькими параметрами - PullRequest
0 голосов
/ 02 февраля 2019

Как я могу сделать POST-запрос для получения нескольких параметров и вывода информации на веб-странице в Go с использованием стандартной библиотеки.

т.е.

пользователь вводит имя и любимое хобби

Имя :

Хобби :

Отправить (кнопка)

затемвеб-страница обновляет и показывает

Ваше имя (Имя) и вам нравится (Хобби)

1 Ответ

0 голосов
/ 02 февраля 2019

Вы можете сделать это, используя пакет html / template в стандартной библиотеке Go.

Основной процесс здесь такой:

  1. Написать шаблон (in go / язык шаблона HTML)
  2. Читать в шаблоне (используя template.ParseFiles или аналогичный)
  3. Прослушивать запросы
  4. Передавать информацию из соответствующих запросов в ваш шаблон (используяExecuteTemplate или аналогичный)

Вы можете передать структуру в ExecuteTemplate, которая затем будет доступна в определяемом вами шаблоне (см. Пример ниже).Например, если ваша структура имеет поле с именем Name, тогда вы можете получить доступ к этой информации в шаблоне с помощью {{ .Name }}.

Вот пример:

main.go :

основной пакет

import (
    "log"
    "encoding/json"
    "html/template"
    "net/http"
)

var tpl *template.Template

func init() {
    // Read your template(s) into the program
    tpl = template.Must(template.ParseFiles("index.gohtml"))
}

func main() {
    // Set up routes
    http.HandleFunc("/endpoint", EndpointHandler)
    http.ListenAndServe(":8080", nil)
}

// define the expected structure of payloads
type Payload struct {
    Name string     `json:"name"`
    Hobby string    `json:"hobby"`
}

func EndpointHandler(w http.ResponseWriter, r *http.Request) {
    // Read the body from the request into a Payload struct
    var payload Payload
    err := json.NewDecoder(r.Body).Decode(&payload)
    if err != nil {
        log.Fatal(err)
    }

    // Pass payload as the data to give to index.gohtml and write to your ResponseWriter
    w.Header().Set("Content-Type", "text/html")
    tpl.ExecuteTemplate(w, "index.gohtml", payload)
}

index.gohtml :

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <div>
        <span>Your name is</span><span>{{ .Name }}</span>
    </div>

    <div>
        <span>Your hobby is</span><span>{{ .Hobby }}</span>
    </div>
</body>
</html>

Образец:

Сполезная нагрузка:

{
    "name": "Ahmed",
    "hobby": "devving"
}

Ответ:

<!DOCTYPE html>
<html>
    <head>
        <title></title>
    </head>
    <body>
        <div>
            <span>Your name is</span>
            <span>Ahmed</span>
        </div>
        <div>
            <span>Your hobby is</span>
            <span>devving</span>
        </div>
    </body>
</html>

Обратите внимание, что это довольно хрупко, поэтому вам определенно следует добавить лучшую обработку ошибок и крайних случаев, но, надеюсь, это полезная отправная точка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...