101 votes

Vérifier l'existence de nil et de l'interface nil dans Go

Actuellement, j'utilise cette fonction d'aide pour vérifier les interfaces nil et nil.

func isNil(a interface{}) bool {
  defer func() { recover() }()
  return a == nil || reflect.ValueOf(a).IsNil()
}

Depuis reflect.ValueOf(a).IsNil() panique si le Kind de la valeur est autre chose que Chan , Func , Map , Ptr , Interface o Slice j'ai jeté dans le différé recover() pour les attraper.

Existe-t-il un meilleur moyen de réaliser ce contrôle ? Je pense qu'il devrait y avoir un moyen plus direct de le faire.

0voto

Vous pouvez peut-être essayer d'utiliser une erreur dans la fonction qui remplit l'interface :

paquet a

func getObj() (obj *someObject, err error) {
   obj = db.getA()
   if obj == nil {
      err = fmt.Errorf("Some error")
   }
   return
}

paquet b

import a

var i interface{}

i, err = a.getObj()
if err != nil {
   // catch err
} else {
   // do next step
}

-1voto

ajaidanial Points 7

Envisager inboundData pour être votre interface

utiliser le len() pour vérifier s'il y a des données dans l'interface

if inboundData != nil && len(inboundData) > 0 {
    // ... do stuff | data is present
} else {
    // ... data is not present
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X