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 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行