Sobes.tech
Junior

Goда интерфейстин түрүн кантип текшерсе болот?

sobes.tech AI

AIден жооп

Go тилинде интерфейсдин түрүн текшерүү үчүн көбүнчө type assertion же type switch колдонулат.

Эгерде сизде var i interface{} деген интерфейс түрүндөгү өзгөрмө болсо жана аны конкреттүү интерфейсти ишке ашырып жатканы же конкреттүү түргө ээ экенин текшергиңиз келсе, мындай кылсаңыз болот:

if v, ok := i.(MyInterface); ok {
    // i MyInterfaceти ишке ашырган, v — түрү конвертацияланган
}

Көптөгөн түрлөрдү текшерүү үчүн, type switch колдонуу ыңгайлуу:

switch v := i.(type) {
case MyInterface:
    // i MyInterfaceти ишке ашырган
case *MyStruct:
    // i — MyStructтин көрсөткүчү
default:
    // башка түр
}

Эгер түрүн динамикалык түрдө текшергиңиз келсе, reflect пакети колдонулат:

import "reflect"

t := reflect.TypeOf(i)
if t.Implements(reflect.TypeOf((*MyInterface)(nil)).Elem()) {
    // i MyInterfaceти ишке ашырган
}

Мындайча айтканда, жөнөкөй учурларда type assertion же type switch жетиштүү, ал эми татаал учурларда reflection колдонулат.