Controllo di nil in Go [chiuso]

4

In Go, è idiatico verificare la presenza di nil e restituire un errore se un parametro è nullo?

I ricevitori del metodo pointer dovrebbero mai includere controlli nulli?

Ho visto molto codice in altre lingue dove le persone che applicano la programmazione difensiva hanno anche controllato i null e hanno generato un'eccezione quando è stato passato un null. Mi chiedo se il Go-equivalent, il controllo di nil e la restituzione di un errore , è idiomatico in Go. Supponiamo che qualche funzione ritorni nul per qualche motivo e passi in un'altra funzione. Questa funzione non gestisce nils e da qualche parte nello stack all'interno della funzione si verifica un "kaboom", lasciando il chiamante a chiedersi se l'errore è all'interno dell'astrazione o nel suo codice di chiamata.

    
posta sqroot 28.09.2015 - 18:23
fonte

1 risposta

1

Controllare nil e restituire un error non è un pattern che ho visto in Go (l'ho usato professionalmente per circa 6 mesi al momento).

Se una funzione che non consente nulla, ad es. un ricevitore del metodo pointer, viene chiamato con un valore nil, che è un errore di programmazione - e quando un errore è causato da qualcosa che è un errore di programmazione, penso che la soluzione idiomatica sia a panic che è in realtà ciò che accadrà quando il il puntatore è dereferenziato.

Come esempio nella libreria go, il pacchetto reflect ha molti metodi che possono essere presi dal panico quando vengono chiamati in modo errato. Per esempio. Value.Float() andrà in panico se l'istanza Value non si riferisce a un valore in virgola mobile.

I valori di ritorno di

error sono, da quello che posso dire, non tanto per comunicare errori di programmazione, ma piuttosto situazioni che accadono al di fuori del controllo della tua applicazione, ad es. non è possibile connettersi al database, non è possibile scrivere il file, perdere la connessione di rete, ecc.

Non ho certamente controllato il ricevitore nei ricevitori del metodo pointer nel codice Go che ho scritto.

    
risposta data 28.09.2015 - 21:19
fonte

Leggi altre domande sui tag