我正在编写自己的logginMiddleware.基本上,我需要记录请求的主体和响应.我遇到的问题是,当我读到身体时,它会变空,我无法读取它两次.我知道它发生是因为它是ReadCloser类型.有没有办法将身体倒回到开头?
让我们转换string为[]byte:
func toBytes(s string) []byte {
return []byte(s) // What happens here?
}
Run Code Online (Sandbox Code Playgroud)
这个演员阵营有多贵?正在进行复制吗?就我在Go规范中看到的那样:字符串的行为类似于字节切片但是不可变,这至少应该涉及复制以确保后续切片操作不会修改我们的字符串s.反向对话会发生什么?[]byte <-> string会话是否涉及编码/解码,如utf8 < - >符文?
我有一个io.Reader不需要关闭:
stringReader := strings.NewReader("shiny!")
Run Code Online (Sandbox Code Playgroud)
我想把它传递给一个接收一个的方法 io.ReadCloser
func readAndClose(source io.ReadCloser) {
...
}
Run Code Online (Sandbox Code Playgroud)
如何io.Reader在io.ReadCloser没有专门创建实现该Close方法的结构的情况下将其转换为a ?