This might make it clearer as well: https://play.golang.org/p/g3KdJUQRlK

On Fri, Jul 15, 2016 at 2:03 PM Thorsten von Eicken <t...@rightscale.com>
wrote:

> You're probably correct, see this:
>
> package main
>
> import (
> "fmt"
> )
>
> type MyError struct{ error }
> type MyError2 struct {
> foo int
> err error
> }
>
> func main() {
> err := MyError{}
> fmt.Printf("%%#v %#v\n", err)
> fmt.Printf("%%+v %+v\n", err)
> fmt.Printf("%%v %v\n", err)
>
> err2 := MyError2{}
> fmt.Printf("%%#v %#v\n", err2)
> fmt.Printf("%%+v %+v\n", err2)
> fmt.Printf("%%v %v\n", err2)
>
> var rr error
> fmt.Printf("%%#v %#v\n", rr)
> fmt.Printf("%%+v %+v\n", rr)
> fmt.Printf("%%v %v\n", rr)
> }
>
> %#v main.MyError{error:error(nil)}
> %+v %!v(PANIC=runtime error: invalid memory address or nil pointer 
> dereference)
> %v %!v(PANIC=runtime error: invalid memory address or nil pointer dereference)
> %#v main.MyError2{foo:0, err:error(nil)}
> %+v {foo:0 err:<nil>}
> %v {0 <nil>}
> %#v <nil>
> %+v <nil>
> %v <nil>
>
>
> It's only if the error is embedded that it panics.
> Playground: https://play.golang.org/p/TeNVj96zxr
>
> On Friday, July 15, 2016 at 1:44:01 PM UTC-7, Matt Harden wrote:
>
>> I think MyError has the Error method, which %v will use but %#v will not.
>> Then it panics because it's trying to call error(nil).Error().
>>
>> On Fri, Jul 15, 2016, 13:22 Thorsten von Eicken <t...@rightscale.com>
>> wrote:
>>
> I was surprised to see Printf %v panic on a struct that %#v prints fine.
>>> Is this expected / intentional / as designed?
>>>
>>> Test case:
>>> package main
>>>
>>> import (
>>> "fmt"
>>> )
>>>
>>> type MyError struct{ error }
>>>
>>> func main() {
>>> err := MyError{}
>>> fmt.Printf("%%#v %#v\n", err)
>>> fmt.Printf("%%+v %+v\n", err)
>>> fmt.Printf("%%v %v\n", err)
>>> }
>>>
>>> Output:
>>>
>>> %#v main.MyError{error:error(nil)}
>>> %+v %!v(PANIC=runtime error: invalid memory address or nil pointer 
>>> dereference)
>>> %v %!v(PANIC=runtime error: invalid memory address or nil pointer 
>>> dereference)
>>>
>>>
>>> Playground: https://play.golang.org/p/B5FeWMryN0
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "golang-nuts" group.
>>>
>> To unsubscribe from this group and stop receiving emails from it, send an
>>> email to golang-nuts...@googlegroups.com.
>>
>>
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to