使用 Docker 的 Go SDK 时输出中的杂散字符

我正在尝试将通过Go运行Docker映像后获得的(接口)转换为进一步使用。io.ReadCloserdocker-sdk[]byte


当我从使用到读取时,它可以完美地打印数据。io.ReadCloserstdcopy.StdCopystdout


代码打印:stdcopy.StdCopy(os.Stderr, os.Stdout, out)


Content-Type: text/html





<html>

<head><title>HTML response</title></head>

<body><h1>Hello, Goodbye</h1></body>

</html>

由于我需要将此整个内容作为响应发送,因此我需要将内容转换为 或 。但是,一旦我将 转换为或使用任何方法但是,它就会在某些行中添加一个特殊字符。[]bytestringio.ReadCloser[]bytestringstdcopy.StdCopy


我用来阅读的片段使用:outbuf*bytes.Buffer.ReadFrom


    buf := new(bytes.Buffer)

    buf.ReadFrom(out)

    fmt.Println(buf.String())

指纹:


Content-Type: text/html





<html>

*<head><title>HTML response</title></head>

%<body><h1>Hello, Goodbye</h1></body>

</html>

如您所见,额外的字符如和正在添加。我也尝试过功能,没有运气。任何建议将不胜感激。*%ioutil.ReadAll



GCT1015
浏览 72回答 1
1回答

拉丁的传说

这些是杂散字节,如 、 等,以某些行为前缀。*%杂散字节似乎是自定义流多路复用协议,允许并沿着同一连接发送。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 mainimport (&nbsp; &nbsp; "bytes"&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "io"&nbsp; &nbsp; "strings")var resp string = `Content-Type: text/html<html><head><title>HTML response</title></head><body><h1>Hello, Goodbye</h1></body></html>`func main() {&nbsp; &nbsp; src := strings.NewReader(resp)&nbsp; &nbsp; dst := &bytes.Buffer{}&nbsp; &nbsp; _, _ = io.Copy(dst, src)&nbsp; &nbsp; fmt.Println(dst.String())&nbsp; &nbsp; // Output:&nbsp; &nbsp; //&nbsp; &nbsp; // Content-Type: text/html&nbsp; &nbsp; // <html>&nbsp; &nbsp; // <head><title>HTML response</title></head>&nbsp; &nbsp; // <body><h1>Hello, Goodbye</h1></body>&nbsp; &nbsp; // </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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go