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:类型不匹配:没有匹配的字段编译解码器 - Golang
Option类型:C++(std::optional)Rust(Option)Go(gob.OptionalValue)