Как правильно получить сообщение в json после отправки формы, используя golang или go - PullRequest
0 голосов
/ 10 марта 2019

Как правильно получить сообщение в json после отправки формы, используя golang. Я сегодня впервые попробую golang.

Вот что я пытаюсь достичь с помощью golang:

Например, в php я могу отобразить / распечатать сообщение json после того, как пользователь отправил форму, а затем получить доступ к нему из внешнего интерфейса

Например.

  if($everything == 'ok'){
 $messages = [
      'message' => 'User Registered successfully'
    ];
   echo json_encode($messages);
exit();
  }

Пожалуйста, как мне сделать это с Голангом.

Приведенный ниже код отлично работает, вставляя записи в базу данных. После успешной вставки в приведенном ниже коде отображается сообщение об успехе, и все работает нормально.

res.Write([]byte("User Registered successfully!" +username))

Вот мой вопрос: Как получить ответ json об успешном сообщении, чтобы я мог получить к нему доступ из своего интерфейса, как в приведенном выше коде php.

Я пытался

messageJson := `{"message": "User Registered successfully"}`
jsonresult_send := json.Marshal(messageJson)

return jsonresult_send

Но отображается ошибка слишком много аргументов для возврата

Here is the entire code



package main

import "database/sql"
import _ "github.com/go-sql-driver/mysql"

import "net/http"
import "fmt"
import "encoding/json"

var db *sql.DB
var err error



type MessageInfo struct {
  Message string
}



func signupPage(res http.ResponseWriter, req *http.Request) {
    if req.Method != "POST" {
        http.ServeFile(res, req, "signupjson.html")
        return
    }



        username := req.FormValue("username")
    password := req.FormValue("password")



    var user string
         err := db.QueryRow("SELECT username FROM users WHERE username=?", username).Scan(&user)


    switch {
    case err == sql.ErrNoRows:
        _, err = db.Exec("INSERT INTO users(username, password) VALUES(?, ?)", username, password)
        if err != nil {
            http.Error(res, "insert error, unable to create your account.", 500)
            return
        }

res.Write([]byte("User Registered successfully!" +username))

// get json response message

messageJson := `{"message": "User Registered successfully"}`
jsonresult_send := json.Marshal(messageJson)

return jsonresult_send

        return
    default:
        http.Redirect(res, req, "/", 301)
    }
}



func homePage(res http.ResponseWriter, req *http.Request) {
    http.ServeFile(res, req, "index.html")
}

func main() {
    db, err = sql.Open("mysql", "root:@/golang44")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()

    err = db.Ping()
    if err != nil {
        panic(err.Error())
    }

    http.HandleFunc("/signupjson", signupPage)
    http.HandleFunc("/", homePage)
        fmt.Println("Listening on 127.0.0.1:8088")
    http.ListenAndServe(":8088", nil)
}

1 Ответ

0 голосов
/ 10 марта 2019

Если я правильно понял, то что вам нужно, это:

func GetPeople(w http.ResponseWriter, r *http.Request) {
    json.NewEncoder(w).Encode(people)
}

В вашем случае вы можете решить это двумя способами:

  1. Со структурой
type Info struct {
    Message string `json:"message"`
}

func MyHandler(w http.ResponseWriter, r *http.Request) {
    ... Some processing here ...

    info := Info{Message: "User Registered successfully"}
    json.NewEncoder(w).Encode(info)
}
С картой
func MyHandler(w http.ResponseWriter, r *http.Request) {
    ... Some processing here ...

    info := map[string]string{"message": "User Registered successfully"}
    json.NewEncoder(w).Encode(info)
}

Если кто-то может протестировать поиск какой-либо синтаксической ошибки, я ценю это.

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