gob: 未为接口注册类型:http.gzipReader

huangapple go评论111阅读模式
英文:

gob: type not registered for interface: http.gzipReader

问题

我是你的中文翻译助手,以下是翻译好的内容:

我有一个简单的TCP服务器,接受连接,使用http.Get获取一个URL,然后使用gob对响应进行编码。但是在编码时,gob无法对http.gzipReader进行编码。

在编码时,会出现以下错误信息:

  1. gob: type not registered for interface: http.gzipReader

我的代码如下:

  1. package main
  2. import (
  3. "encoding/gob"
  4. "fmt"
  5. "log"
  6. "net"
  7. "net/http"
  8. "os"
  9. )
  10. const (
  11. CONN_HOST = "localhost"
  12. CONN_PORT = "3333"
  13. CONN_TYPE = "tcp"
  14. )
  15. func main() {
  16. // 监听传入的连接。
  17. l, err := net.Listen(CONN_TYPE, CONN_HOST+":"+CONN_PORT)
  18. if err != nil {
  19. fmt.Println("Error listening:", err.Error())
  20. os.Exit(1)
  21. }
  22. for {
  23. conn, err := l.Accept()
  24. if err != nil {
  25. fmt.Println("Error accepting: ", err.Error())
  26. os.Exit(1)
  27. }
  28. go handleRequest(conn)
  29. }
  30. }
  31. func handleRequest(conn net.Conn) {
  32. res, err :=
  33. http.Get("http://info.cern.ch/hypertext/WWW/TheProject.html")
  34. if err != nil {
  35. log.Fatal(err)
  36. } else {
  37. encoder := gob.NewEncoder(conn)
  38. er := encoder.Encode(res)
  39. if er != nil {
  40. fmt.Println(er)
  41. }
  42. }
  43. conn.Write([]byte("Message received."))
  44. conn.Close()
  45. }

有没有办法对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:

  1. gob: type not registered for interface: http.gzipReader

My code is given below:

  1. package main
  2. import (
  3. "encoding/gob"
  4. "fmt"
  5. "log"
  6. "net"
  7. "net/http"
  8. "os"
  9. )
  10. const (
  11. CONN_HOST = "localhost"
  12. CONN_PORT = "3333"
  13. CONN_TYPE = "tcp"
  14. )
  15. func main() {
  16. // Listen for incoming connections.
  17. l, err := net.Listen(CONN_TYPE, CONN_HOST+":"+CONN_PORT)
  18. if err != nil {
  19. fmt.Println("Error listening:", err.Error())
  20. os.Exit(1)
  21. }
  22. for {
  23. conn, err := l.Accept()
  24. if err != nil {
  25. fmt.Println("Error accepting: ", err.Error())
  26. os.Exit(1)
  27. }
  28. go handleRequest(conn)
  29. }
  30. }
  31. func handleRequest(conn net.Conn) {
  32. res, err :=
  33. http.Get("http://info.cern.ch/hypertext/WWW/TheProject.html")
  34. if err != nil {
  35. log.Fatal(err)
  36. } else {
  37. encoder := gob.NewEncoder(conn)
  38. er := encoder.Encode(res)
  39. if er != nil {
  40. fmt.Println(er)
  41. }
  42. }
  43. conn.Write([]byte("Message received."))
  44. conn.Close()
  45. }

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

huangapple
  • 本文由 发表于 2017年4月23日 13:55:04
  • 转载请务必保留本文链接:https://go.coder-hub.com/43567907.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定