如何打印整个url.URL结构?

时间:2017-07-24 00:17:48

标签: go

我有以下https://play.golang.org/p/utnlHJqlX1

package main

import (
    "fmt"
    "net/url"
)

func main() {
    u, err := url.Parse("http://www.something.com")
    if err != nil {
        fmt.Println(err)
    }

    fmt.Printf("%+v", u)
}

我期待“%+ v”打印结构和字段。而是打印:“http://www.something.com

2 个答案:

答案 0 :(得分:3)

这似乎是因为Parse正在返回指向结构的指针。

试试这个(注意*):

fmt.Printf("%+v\n", *u)

修改了游乐场:

https://play.golang.org/p/Grjrp2QriK

修改

要对此进行扩展,原因是fmt在执行Stringer时会以不同方式处理实现%+v的结构。

这是相关代码:https://golang.org/src/fmt/print.go?s=4772:4849#L577

由于*URL实施了Stringer:https://golang.org/pkg/net/url/#URL.String

这是正在使用的字符串。

通过取消引用指针,我们得到一个URL,它没有实现接口(因为String方法中的接收器是一个指针)。

答案 1 :(得分:0)

您始终可以使用%#v格式动词来打印任何值的Go语法表示。例如:

fmt.Printf("%#v\n",u)

这对于调试来说非常方便。自动代码生成。由于输出是Go表示,因此可以将其粘贴到测试中或类似于变量。

这样您就不必担心覆盖fmt.Stringer

的类型