- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过在 Go 中使用 gorilla mux 库构建不同的基本 REST API 来学习后端开发(遵循 tutorial)
这是我到目前为止构建的代码:
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
部分。
json.NewEncoder
正在将 Go 数据结构转换为 JSON 字符串和
json.NewDecoder
正在做相反的事情(如果我错了,请纠正我)。
json.NewDecoder
的一部分吗?和 json.NewEncoder
做? encoding
这些术语感到很困惑, serialization
, marshaling
以及它们之间的区别最佳答案
首先,我们要明白编码过程实际上并不意味着它翻译了types
。并返回 type
的 JSON 表示.为您提供 JSON 表示的过程称为编码过程,可以通过调用 json.Marshal function 来完成。 .
另一方面,Encoding过程意味着我们要获取任意type
的JSON编码并将其写入(编码)到实现 io.Writer 接口(interface)的流上。正如我们所看到的 func NewEncoder(w io.Writer) *Encoder
收到 io.Writer
接口(interface)作为参数并返回 *json.Encoder
目的。当方法encoder.Encode()
被调用时,它会执行 Marshaling 过程,然后将结果写入我们在创建新 Encoder 对象时传递的 io.Writer 。你可以看到 json.Encoder.Encode() here 的实现.
所以,如果你问谁对 http 流进行编码处理,答案是 http.ResponseWriter
。 . ResponseWriter 实现了 io.Writer 接口(interface),当 Encode()
方法被调用时,编码器会将对象编码为 JSON 编码表示,然后调用 func Write([]byte) (int, error)
这是 io.Writer 接口(interface)的一个契约方法,它将对 http 流进行写入过程。
总之,我可以说 Marshal 和 Unmarshal 意味着我们想要获得任何类型的 JSON 表示,反之亦然。而编码意味着我们要进行编码处理,然后将结果写入(编码)到任何流对象。而解码意味着我们想要从任何流中获取(解码)一个 json 对象,然后执行 Unmarshaling 过程。
关于json - json.NewEncoder 和 json.NewDecoder 中的序列化/编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63475132/
我正在尝试创建一个 API 端点来将内容保存到数据库中,但是,我通过 POST 请求传递的整数似乎没有正确解析 这是我的结构: type OnlineTestForm struct { Form
我正在尝试对 HTTP 请求进行 base64 解码,然后使用 JSON 解码器对其进行解码。 我尝试了两种实现base64解码器的方法: func decode(encoded []byte) ([
这段代码的要点在 Go 中似乎很常见: if err := json.NewDecoder(r.Body).Decode(&mr); err != nil { return mr, err }
我有一个设置了上下文截止日期的 Golang 程序。我正在发送 HTTP 请求,并希望在阅读正文时看到超出截止日期的错误。 似乎当我使用 ioutil.ReadAll 读取响应主体时,读取方法将被中断
我有一个设置了上下文截止日期的 Golang 程序。我正在发送 HTTP 请求,并希望在阅读正文时看到超出截止日期的错误。 似乎当我使用 ioutil.ReadAll 读取响应主体时,读取方法将被中断
我正在尝试从 html 响应中解码 XML。 =>我将这个响应主体作为字符串保存到一个变量中,并使用 xml.Unmarshal 函数成功解码。代码: err = xml.Unmarshal(
我正在尝试找出一种在JSON解码http.Response.Body时获取错误原因的方法 if err := json.NewDecoder(resp.Body).Decode(&lResp); er
我完全是个菜鸟,我想了解我在这里缺少什么。我期望使用 dec.Decode 循环遍历 json 值并以响应映射结束。我得到的是整个 json 字符串作为 map 第一个元素的键。我错过了什么? 示例响
我正在尝试通过在 Go 中使用 gorilla mux 库构建不同的基本 REST API 来学习后端开发(遵循 tutorial) 这是我到目前为止构建的代码: package main impor
我正在使用 the answer here从 api 获取一些 json: package main import ( "encoding/json" "fmt" "log"
这是我的结构: type Media struct { MediaID string `json:"media_id"` MediaType float64 `json:"m
我正在开发一个 API 客户端,我需要根据请求对 JSON 有效负载进行编码并从响应中解码 JSON 正文。 我已经阅读了几个库的源代码,根据我所见,我基本上有两种可能对 JSON 字符串
I'm currently learning Go and have built a small API in which I search for and summarize data fro
我按照本网站上的示例编写了一些代码来解析大型 XML 文件 (>3GB):https://blog.singleton.io/posts/2012-06-19-parsing-huge-xml-fil
来自 PHP,我是这里的 Golang 新手。我读到一个与我的问题非常相似的问题,但我的实现略有偏差。每当我使用以下代码进行解码时,变量 msg.Username 始终为空。 Golang 不会在这里
我是一名优秀的程序员,十分优秀!