# Cast from Interface to Concrete Type

# How to convert from an interface to concrete type.


🗓 February 13, 2019 | 👱 By: Hugh



What do you do when you have an object of type interface{} and want to convert it to a concrete type? You use the mysterious .(Type) operator! The following is a pretty poor example, but should get the concept across:

type Person struct {
	firstName string
	lastName  string
}
func printIfPerson(object interface{}) {
	person, ok := object.(Person)
	if ok {
		fmt.Printf("Hello %s!\n", person.firstName)
	}
}

Click here for a playground sample.

A more realistic example would be from Macaron which provides a map available in a request context that can be used to store an arbitrary data type that can be accessed later. If you added a Person at some point and wanted to access it later, you would follow the same pattern:

// ...define person
ctx.Data["person"] = person
//... some other function
person, ok := ctx.Data["person"].(Person)
if !ok {
    // error
}
//...use person

If you like to live dangerously, you don't need to check the value of ok, but i would advise against it.