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 колдонулат.