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 
> <javascript:>> 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 <javascript:>.
>> 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