Type assertion
When an interface (empty or otherwise) is assigned to a variable, it carries type information that can be queried at runtime. Type assertion is a mechanism that is available in Go to idiomatically narrow a variable (of interface type) down to a concrete type and value that are stored in the variable. The following example uses type assertion in the eat function to select which food type to select in the eat function:
type food interface {
eat()
}
type veggie string
func (v veggie) eat() {
fmt.Println("Eating", v)
}
type meat string
func (m meat) eat() {
fmt.Println("Eating tasty", m)
}
func eat(f food) {
veg, ok := f.(veggie)
if ok {
if veg == "okra" {
fmt.Println("Yuk! not eating ", veg)
}else{
veg.eat()
}
return
}
mt, ok := f.(meat...