gpt4 book ai didi

go - 如何在使用 Golang 提交表单后正确获取 JSON 中的消息

转载 作者:数据小太阳 更新时间:2023-10-29 03:20:18 26 4
gpt4 key购买 nike

使用 Golang 提交表单后,如何正确获取 JSON 格式的消息?我今天第一次尝试 Golang。

这是我试图实现的目标:例如,在 PHP 中,我可以在用户提交表单后回显/打印 JSON 消息,然后可以从前端访问它。

例如。

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

我如何使用 Golang 做到这一点?

下面的代码通过将记录插入数据库来正常工作。成功插入后,它会在下面的代码中显示一条成功消息,一切正常。

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

如何获取成功消息的 JSON 响应,以便我可以像上面的 PHP 代码一样从前端访问它?

我试过:

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

return jsonresult_send

但它显示错误返回的参数太多

完整代码如下:

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)
}

最佳答案

如果我没理解错的话,你需要的是:

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)
}
  1. 有 map
func MyHandler(w http.ResponseWriter, r *http.Request) {
... Some processing here ...

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

如果有人可以测试以查找语法错误,我将不胜感激。

关于go - 如何在使用 Golang 提交表单后正确获取 JSON 中的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55082534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com