1 回答
TA贡献1789条经验 获得超8个赞
这些是杂散字节,如 、 等,以某些行为前缀。*%
杂散字节似乎是自定义流多路复用协议,允许并沿着同一连接发送。STDOUTSTDERR
使用解释这些自定义标头和那些杂散字符,通过删除每条数据的协议标头来避免。stdcopy.StdCopy()
参考: https://github.com/moby/moby/blob/master/pkg/stdcopy/stdcopy.go#L42
// Write sends the buffer to the underneath writer.
// It inserts the prefix header before the buffer,
// so stdcopy.StdCopy knows where to multiplex the output.
// It makes stdWriter to implement io.Writer.
所以,你的朋友是和使用Docker时的替代品和朋友。stdcopy.StdCopyio.Copy
一个示例,为您提供一个想法:
package main
import (
"bytes"
"fmt"
"io"
"strings"
)
var resp string = `
Content-Type: text/html
<html>
<head><title>HTML response</title></head>
<body><h1>Hello, Goodbye</h1></body>
</html>`
func main() {
src := strings.NewReader(resp)
dst := &bytes.Buffer{}
_, _ = io.Copy(dst, src)
fmt.Println(dst.String())
// Output:
//
// Content-Type: text/html
// <html>
// <head><title>HTML response</title></head>
// <body><h1>Hello, Goodbye</h1></body>
// </html>
}
签名:AS有一个方法,因此它实现了接口并且它工作。func io.Copy(dst io.Writer, src io.Reader)dst(*bytes.Buffer)Writeio.Writer
现在,当使用时使用相同的想法,因为签名是相同的。https://pkg.go.dev/github.com/docker/docker/pkg/stdcopy#StdCopystdcopy.StdCopy()
- 1 回答
- 0 关注
- 71 浏览
添加回答
举报