doupuzhimuhan9216 2018-06-21 00:39
浏览 58
已采纳

如果没有EOF,从Golang中的服务器读取Unix套接字响应的最佳方法是什么?

I want to read full response from the server, but I don't know precise size of it.

I would expect this to work:

message, err := ioutil.ReadAll(conn)

But server is not sending EOF, so this statement just hangs.

I know its a JSON response, so I could read data until the last }, but that seems not the best way how it could be done.

What is the best practice to read full response?


update:

after some while I found out that it's possible this way:

var m map[string]interface{}
d := json.NewDecoder(conn)
d.Decode(&m)

for key, value := range m {
    fmt.Print(key)
    fmt.Print(" : ")
    fmt.Print(value)
    fmt.Print("
")
    switch vv := value.(type) {
    case map[string]interface{}:
        for k, v := range vv {
            fmt.Print(k)
            fmt.Print(" : ")
            fmt.Print(v)
            fmt.Print("
")
        }
    }
}
  • 写回答

2条回答 默认 最新

  • douxin1884 2018-06-21 00:53
    关注

    Use a json.Decoder. Here's how to read multiple messages:

     d := json.NewDecoder(conn)
     for {
         var m message // <-- use whatever type is appropriate for your app
         err := d.Decode(&m)
         if err == io.EOF {
             break
         } else if err != nil {
             // handle error
         }
         // do something with m
    }
    

    Remove the loop if you expect exactly one message.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试