2017-04-23 153 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

回答