Golang 接收 GET/POST 请求并返回 JSON 数据

概述

Golang 是一门快速、安全,易于使用的程序语言,它被广泛地用于Web和网络编程领域。本文将详细介绍如何使用 Golang 编写一个能够接收 HTTP GET/POST 请求并返回 JSON 数据的 Web 服务器。

准备工作

go get
github.com/gorilla/muxgithub.com/unrolled/render

编写代码

main.go
package main

import (
    "encoding/json" //用于 JSON 数据的编码和解码
    "net/http"      // 用于 HTTP 请求和响应
    "github.com/unrolled/render" // JSON 渲染库
    "github.com/gorilla/mux" // 路由库
)

type User struct {
    Name string `json:"name"`
    Age int `json:"age"`
    Email string `json:"email"`
}

func main() {
    r := mux.NewRouter()

    r.HandleFunc("/user/{name}", getUser).Methods("GET")
    r.HandleFunc("/user", addUser).Methods("POST")

    http.ListenAndServe(":8080", r)
}

func getUser(w http.ResponseWriter, r *http.Request) {
    params := mux.Vars(r) 
    name := params["name"]

    // 创建一个用户对象
    user := User{Name: name, Age: 25, Email: "test@test.com"}

    // 将用户对象编码为 JSON 格式
    jsonData, _ := json.Marshal(user)

    // 将 JSON 数据渲染到 HTTP 响应中
    renderer := render.New()
    renderer.JSON(w, http.StatusOK, string(jsonData))
}

func addUser(w http.ResponseWriter, r *http.Request) {
    var user User

    // 从 HTTP POST 请求中解码 JSON 数据,并存储到用户对象中
    err := json.NewDecoder(r.Body).Decode(&user)
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    // 将用户对象编码为 JSON 格式
    jsonData, _ := json.Marshal(user)

    // 将 JSON 数据渲染到 HTTP 响应中
    renderer := render.New()
    renderer.JSON(w, http.StatusOK, string(jsonData))
}

代码解释

UserUsergithub.com/unrolled/render
热门推荐:
mainmux.Router
/user/{name}{name}/user
getUseraddUser/user/{name}/user

运行程序

保存代码之后,使用以下命令编译并运行程序:

go build main.go
./main
http://localhost:8080/user/John

结论

github.com/gorilla/muxgithub.com/unrolled/render

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:golang接收get/post请求并返回json数据 - Python技术站