douquanzhan0315 2019-03-09 22:20
浏览 151
已采纳

如何使用golang或go提交表单后在json中正确获取消息

How to properly get message in json after form submision using golang. Am just trying golang today for the first time.

Here is what am trying to achieve with golang:

In php for instance I can echo/print a json message after user submmitted a form and can then access it from the front end

Eg.

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

Please How do I do this with golang.

The code below works fine by inserting records to database. Upon a successful insert, it display a success message in the code below and everything is working fine.

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

Here is my qusetion: How do I get json response of the successful message so that I can access it from my front end just like in php code above.

I have tried

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

return jsonresult_send

But it displays error too many argument to return

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条回答 默认 最新

  • duanke3985 2019-03-10 00:54
    关注

    If I understood correctly, what you need is this:

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

    In your case, you could solve it in two ways:

    1. With a struct
    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. With a 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)
    }
    

    If anyone can test to look for some syntax error I appreciate it.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表