Sobes.tech
Junior

Jak sprawdzić typ interfejsu w Go?

sobes.tech AI

Odpowiedź od AI

W Go, aby sprawdzić typ interfejsu, często używa się assertion typu lub switcha typu.

Jeśli masz zmienną typu interfejsowego, na przykład var i interface{}, i chcesz sprawdzić, czy implementuje ona konkretny interfejs lub czy jest określonym typem, możesz to zrobić tak:

if v, ok := i.(MyInterface); ok {
    // i implementuje MyInterface, v to rzutowany typ
}

Do sprawdzania wielu typów wygodnie jest użyć switch typu:

switch v := i.(type) {
case MyInterface:
    // i implementuje MyInterface
case *MyStruct:
    // i jest wskaźnikiem na MyStruct
default:
    // inny typ
}

Jeśli chcesz sprawdzić typ bardziej dynamicznie, możesz użyć pakietu reflect:

import "reflect"

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

W ten sposób, dla prostych przypadków, wystarczy assertion typu lub switch typu; dla bardziej złożonych, używa się reflection.