2017-04-23 104 views
0

我接受连接的简单TCP服务器,使用http.Get获取URL,然后使用gob对响应进行编码。但gob无法编码http.gzipReader。 在编码它提供了以下错误信息: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。但无法这样做。任何人都可以建议我解决这个问题吗?

+1

我得到这个错误:'gob:type not registered for interface:http.bodyEOFSignal'。确定你想编码['http.Response']的整个部分(https://golang.org/pkg/net/http/#Response)? 'http.Get'响应的内容(HTML页面)可以通过'Body'字段(这是一个接口,数据本身可能还没有立即可用,或者它可能用gzip等编码)提供,你应该先阅读它放入一个缓冲区(或创建一个包装),然后将其传递给gob编码器。 – putu

回答