Sobes.tech
Junior

Jak zkontrolovat typ rozhraní v Go?

sobes.tech AI

Odpověď od AI

V jazyce Go se často pro kontrolu typu rozhraní používá type assertion nebo type switch.

Pokud máte proměnnou typu rozhraní, například var i interface{}, a chcete zjistit, zda implementuje konkrétní rozhraní nebo je určitého typu, můžete to udělat takto:

if v, ok := i.(MyInterface); ok {
    // i implementuje MyInterface, v je převedený typ
}

Pro kontrolu více typů je vhodné použít type switch:

switch v := i.(type) {
case MyInterface:
    // i implementuje MyInterface
case *MyStruct:
    // i je ukazatel na MyStruct
default:
    // jiný typ
}

Pokud chcete typ kontrolovat dynamickyji, můžete použít balíček reflect:

import "reflect"

t := reflect.TypeOf(i)
if t.Implements(reflect.TypeOf((*MyInterface)(nil)).Elem()) {
    // i implementuje MyInterface
}

Tímto způsobem jsou pro jednoduché případy dostačující type assertion nebo type switch, pro složitější případy je potřeba reflection.