Follow

@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.

@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
CleverLibre Social

CleverLibre Social is an inclusive social instance for open discussion, learning, and community.
All cultures welcome.
Hate speech and harassment strictly forbidden.