主要记录使用Golang实现一个POST请求所用到的小知识点
1、项目结构客户端向服务端注册用户信息,服务端返回注册信息中的用户名
PS E:\goland-workspace\GolangLearning\http> tree /f
卷 文件 的文件夹 PATH 列表
卷序列号为 0C66-1433
E:.
├─client
│ client.go
│
└─server
server.go
1.1 server端
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
// user结构体,用于保存request Body中json解码后的内容
type user struct {
Name string
}
func registe(w http.ResponseWriter, r *http.Request) {
user1 := &user{}
body, _ := ioutil.ReadAll(r.Body)
json.Unmarshal(body, user1)
fmt.Fprintf(w, "The name you submit is %s", user1.Name)
}
func main() {
http.HandleFunc("/register", registe)
http.ListenAndServe(":8080", nil)
}
注:
func ReadAll(r io.Reader) ([]byte, error)func Unmarshal(data []byte, v any) error指针v
1.2 Client端
package main
import (
"fmt"
"io/ioutil"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"name":"tian"}`)
// body := strings.NewReader("{\"name\":\"tian\"}")
req, _ := http.NewRequest("POST", "http://127.0.0.1:8080/register", body)
res, _ := http.DefaultClient.Do(req)
ret, _ := ioutil.ReadAll(res.Body)
fmt.Println(string(ret))
}
注:
func NewReader(s string) *Readerfunc NewBufferString(s string) *Bufferfunc NewReader(b []byte) *Reader{"name":"tian"}body := strings.NewReader("{\"name\":\"tian\"}")func NewRequest(method, url string, body io.Reader) (*Request, error)GET,POST,PUT,DELETEio.Reader*bytes.Buffer, *bytes.Reader, or *strings.Reader
2、运行
首先运行服务端,然后客户端发起请求,可以得到如下结果