Can you not convert it to an unsafe.Pointer and check for that being nil?
On Tuesday, 8 May 2018 16:49:23 UTC+3, Michael Cohen wrote:
>
> In my case, being a new go learner the following bit of code stumped me. I
> am receiving a interface{} value and I am trying to figure out the best way
> to print it. If the value supports the fmt.Stringer() interface then I want
> to use that, otherwise i can do some other things. So I came up with this:
>
> func printer(foo interface{}) string {
>
> switch t := foo.(type) {
> ....
> case fmt.Stringer:
> return t.String()
> ...
> }
>
> But this crashes when foo is really a nil pointer to a type which does
> support Stringer. The problem is that there is no way for me to actually
> know foo is nil and avoid it. I can not compare foo to nil because foo is
> an interface so foo==nil is false, and my type assertion is converting it
> to an interface too so i can not compare that to nil either. Literally the
> only way this code can work is to just catch the error and return the
> string "nil". This is hugely confusing behavior especially for a new comer.
>
> Apart for this it seems to me the natural way to implement this kind of
> code - for example in python the code is natural, and I wanted to carry the
> same general technique to go:
>
> def printer(foo):
> if isinstance(foo, Stringer):
> return foo.String()
> ...
>
> Thanks
> Michael.
>
>
>
> On Tuesday, June 5, 2012 at 8:50:00 AM UTC+10, jgoldbg wrote:
>>
>> I'm a bit stumped and wondering if I'm overlooking some way, besides
>> reflection,
>> to determine whether the data pointed at by an interface{} is actually a
>> nil
>> pointer:
>>
>> http://play.golang.org/p/Isoo0CcAvr
>>
>> Any ideas what I'm overlooking?
>>
>> jonathan
>>
>
--
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 [email protected].
For more options, visit https://groups.google.com/d/optout.