@lupyuen you might want to use the

x, ok := y.(type)
if !ok {
return fmt.Errorf("type assertion failed for: %v", x)
}

style of type assertions. by using the form with two return values you can prevent panics and instead return an error if you have malformed input data.

Follow

@velartrill
it's a type assertion, because the values of the map are interface{}. the empty interface is fulfilled by _any_ type. you usually need to do type asserts if you want to do _more_ than is defined in the interface. you need the concrete type for that.

if you don't want to have a panic if the type doesn't match, you use the form with two return values. usually if the input is controlled by yourself you want panics because a non matching type is clearly a bug then. for parsing things like irregular JSON it's handy to have the two valued form. an alternative, especially if you have a set of possible types are type switches: tour.golang.org/methods/16

@lupyuen

Sign in to participate in the conversation
Qoto Mastodon

QOTO: Question Others to Teach Ourselves
An inclusive, Academic Freedom, instance
All cultures welcome.
Hate speech and harassment strictly forbidden.