我正在尝试通过在 Go 中使用 gorilla mux 库构建一个不同的基本 REST API 来学习后端开发(遵循本教程)
这是我到目前为止构建的代码:
package main
import (
"encoding/json"
"net/http"
"github.com/gorilla/mux"
)
// Post represents single post by user
type Post struct {
Title string `json:"title"`
Body string `json:"body"`
Author User `json:"author"`
}
// User is struct that represnets a user
type User struct {
FullName string `json:"fullName"`
Username string `json:"username"`
Email string `json:"email"`
}
var posts []Post = []Post{}
func main() {
router := mux.NewRouter()
router.HandleFunc("/posts", addItem).Methods("POST")
http.ListenAndServe(":5000", router)
}
func addItem(w http.ResponseWriter, req *http.Request) {
var newPost Post
json.NewDecoder(req.Body).Decode(&newPost)
posts = append(posts, newPost)
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(posts)
}
但是,我真的很困惑到底发生了json.NewDecoder什么json.NewEncoder。
据我了解,最终以 REST API 通过 Internet 传输的数据将以字节/二进制格式(我猜是 UTF-8 编码?)的形式发生。json.NewEncoder
将 Go 数据结构转换为 JSON 字符串也是如此,并且json.NewDecoder
正在做相反的事情(如果我错了,请纠正我)。
那么这里谁负责将这个 JSON 字符串转换为 UTF-8 编码进行数据传输呢?这也是做什么json.NewDecoder
和json.NewEncoder
做什么的一部分吗?
此外,如果这两个函数只是对 JSON 进行序列化/反序列化,那么为什么要命名编码器和解码器(编码不是总是与二进制数据转换相关吗?)。老实说,我对这些术语encoding
以及它们之间的区别感到很困惑serialization
marshaling
有人能解释一下每个转换级别(json、二进制、内存数据结构)的数据传输到底是如何发生的吗?
阿波罗的战车
达令说
相关分类