英文:
gob: type not registered for interface: http.gzipReader
问题
我是你的中文翻译助手,以下是翻译好的内容:
我有一个简单的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() {
// 监听传入的连接。
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.gzipReader进行编码?我看到了gob.Register()的一个例子,但是我尝试注册http.gzipReader时无法成功。有人能给我提供解决这个问题的解决方案吗?
英文:
I a simple TCP server that accept connection , Get a URL using http.Get and then encode the response using gob. But gob fails to encode http.gzipReader.
On encoding it gives following error message:
gob: type not registered for interface: http.gzipReader
My code is given below:
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()
}
Is there any way to encode http.gzipReaderc ?? I saw an example of gob.Register() , but I am trying to registrer http.gzipReaderc . But unable to do so. can any one suggest me solution to this problem ?
答案1
得分: 1
我通过实现自己的ReadCloser
解决了这个问题。请查看HTTP Caching Client。
英文:
I solved this issue by implementing my own ReadCloser
. Check HTTP Caching Client
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论