【问题标题】:how to access values in response如何在响应中访问值
【发布时间】:2014-03-02 18:03:05
【问题描述】:

你好,我想知道是否有一种简单的方法可以在 golang 中漂亮地打印结构

我正在尝试打印请求的标头

package main

import (
    "fmt"
    "net/http"
    // "io/ioutil"
    "io"
    "os"
)

func main() {

    resp, err := http.Get("http://google.com/")
    if err != nil {
        fmt.Println("ERROR")
    }
    defer resp.Body.Close()
    fmt.Println(resp)
    // body, err := ioutil.ReadAll(resp.Body)
    out, err := os.Create("filename.html")
    io.Copy(out, resp.Body)

}

我得到以下信息

&{200 OK 200 HTTP/1.1 1 1 map[Date:[Thu, 30 Jan 2014 09:05:33 GMT] Content-Type:[text/html; charset=ISO-8859-1] P3p:[CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."] X-Frame-Options:[SAMEORIGIN] Expires:[-1] Cache-Control:[private, max-age=0] Set-Cookie:[PREF=ID=5718798ffa48c7de:FF=0:TM=1391072733:LM=1391072733:S=NNfE1JSHH---lqDV; expires=Sat, 30-Jan-2016 09:05:33 GMT; path=/; domain=.google.com NID=67=aIMpDPrQ5-lBg0_1jFBSmg7KUZPprzZ6Srgbd_CVSK63Ugf_Jr75KwUaALOrBkdpAdFN6O9L8TQd2ng-g_o7HqIS-Drt_XHPj17KkjayHJ7xqUDAlL3ySyJafmRcMRD5; expires=Fri, 01-Aug-2014 09:05:33 GMT; path=/; domain=.google.com; HttpOnly] Server:[gws] X-Xss-Protection:[1; mode=block] Alternate-Protocol:[80:quic]] 0xc200092b80 -1 [chunked] false map[] 0xc20009a750}

目前还不清楚这是哪种结构,以及我如何访问响应结构中的各种值(我希望将其称为结构是正确的)

【问题讨论】:

    标签: go


    【解决方案1】:

    resp 变量是一个结构(你说得对:))。你需要 resp.Header
    resp.Header 是一个带有字符串键和字符串值的映射。您可以轻松打印。

    例如:

    for header, value := range resp.Header { 
       fmt.Println(header,value)
    }
    

    有用的东西:

    1. About header
    2. About response

    【讨论】:

      【解决方案2】:

      那里有几个漂亮的打印库。这是我真正喜欢的:

      https://github.com/davecgh/go-spew

      允许您这样做:

      package main
      
      import (
          "fmt"
          "net/http"
          // "io/ioutil"
          "io"
          "os"
          "github.com/davecgh/go-spew"
      )
      
      func main() {
      
          resp, err := http.Get("http://google.com/")
          if err != nil {
              fmt.Println("ERROR")
          }
          defer resp.Body.Close()
          spew.Dump(resp)
          // body, err := ioutil.ReadAll(resp.Body)
          out, err := os.Create("filename.html")
          io.Copy(out, resp.Body)
      
      }
      

      我认为这会很好地满足您的要求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-23
        • 2017-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多