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。但無法這樣做。任何人都可以建議我解決這個問題嗎?
我得到這個錯誤:'gob:type not registered for interface:http.bodyEOFSignal'。確定你想編碼['http.Response']的整個部分(https://golang.org/pkg/net/http/#Response)? 'http.Get'響應的內容(HTML頁面)可以通過'Body'字段(這是一個接口,數據本身可能還沒有立即可用,或者它可能用gzip等編碼)提供,你應該先閱讀它放入一個緩衝區(或創建一個包裝),然後將其傳遞給gob編碼器。 – putu