gob:未为接口注册类型:http.gzipreder

gob:未为接口注册类型:http.gzipreder,go,gob,Go,Gob,我创建了一个简单的TCP服务器,它接受连接,使用http.Get获取URL,然后使用gob对响应进行编码。但是gob无法对http.gzipreder进行编码。 编码时,它会给出以下错误消息: gob: type not registered for interface: http.gzipReader 我的代码如下: package main import ( "encoding/gob" "fmt" "log" "net" "net/http"

我创建了一个简单的TCP服务器,它接受连接,使用http.Get获取URL,然后使用gob对响应进行编码。但是gob无法对http.gzipreder进行编码。 编码时,它会给出以下错误消息:

gob: type not registered for interface: http.gzipReader
我的代码如下:

package main
import (
    "encoding/gob"
    "fmt"
    "log"
    "net"
    "net/http"
    "os"
)
const (
    CONN_HOST = "localhost"
    CONN_PORT = "3333"
    CONN_TYPE = "tcp"
)

func main() {
    // Listen for incoming connections.
    l, err := net.Listen(CONN_TYPE, CONN_HOST+":"+CONN_PORT)
    if err != nil {
        fmt.Println("Error listening:", err.Error())
        os.Exit(1)
    }
    for {
        conn, err := l.Accept()
        if err != nil {
            fmt.Println("Error accepting: ", err.Error())
            os.Exit(1)
        }
        go handleRequest(conn)
    }
}
func handleRequest(conn net.Conn) {
    res, err :=
        http.Get("http://info.cern.ch/hypertext/WWW/TheProject.html")
    if err != nil {
        log.Fatal(err)
    } else {
        encoder := gob.NewEncoder(conn)
        er := encoder.Encode(res)
        if er != nil {
            fmt.Println(er)
        }
    }
    conn.Write([]byte("Message received."))
    conn.Close()
}

有没有办法对http.gzipreader进行编码??我看到了一个gob.Register()的示例,但我正在尝试注册http.gzipReaderc。但我们不能这样做。有人能给我这个问题的解决方案吗?

我通过实现自己的
ReadCloser
解决了这个问题。检查

我得到了这个错误:
gob:type未为接口注册:http.bodyEOFSignal
。您确定要对的整个部分进行编码吗?
http.Get
响应的内容(HTML页面)可通过
Body
字段(这是一个接口,数据本身可能尚未立即可用,或者可能在gzip中编码等)获得,您应该首先将其读入缓冲区(或创建包装器),然后将其传递给gob编码器。