gob:类型未注册接口:http.gzipReader

Posted

技术标签:

【中文标题】gob:类型未注册接口:http.gzipReader【英文标题】:gob: type not registered for interface: http.gzipReader 【发布时间】:2017-04-23 05:55:04 【问题描述】:

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

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.gzipReaderc 进行编码?我看到了 gob.Register() 的示例,但我正在尝试注册 http.gzipReaderc 。但无法这样做。谁能建议我解决这个问题?

【问题讨论】:

我收到此错误:gob: type not registered for interface: http.bodyEOFSignal。确定要对http.Response 的整个部分进行编码吗? http.Get 响应的内容(HTML 页面)可通过 Body 字段获得(这是一个接口,数据本身可能尚未立即可用,或者可能以 gzip 等编码),您应该先将其读入缓冲区(或创建包装器),然后将其传递给 gob 编码器。 【参考方案1】:

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

【讨论】:

以上是关于gob:类型未注册接口:http.gzipReader的主要内容,如果未能解决你的问题,请参考以下文章

gob:类型未注册接口:map[string]interface

gob 解码结构中的接口与原始接口之间的区别

gob:类型不匹配:没有匹配的字段编译解码器 - Golang

Go:将 gob 与 zmq4 一起使用

Option类型:C++(std::optional)Rust(Option)Go(gob.OptionalValue)

从 COM 调用返回时未注册接口 (0x80040155)