2015-09-14 14 views
6

Le funzioni private/non esportate non utilizzate potrebbero essere rilevate. Perché il compilatore non si lamenta come fa per le variabili non utilizzate?Perché Golang consente la compilazione di funzioni inutilizzate?

Modifica: la domanda si applica anche ai tipi/interfacce privati ​​non utilizzati.

+5

Perché possono essere rimossi senza effetti collaterali (tranne per 'init', che viene sempre eseguito). Variabili meno perché la loro istanziazione può avere effetti collaterali. Inoltre, sono consentite variabili non utilizzate a livello di pacchetto. – thwd

+0

Ho pensato che lo facessero per mantenere pulito anche il codice non solo per evitare effetti collaterali (ad esempio allocazioni) –

+2

Anche i tipi non utilizzati (interfacce, strutture) non sono un errore. Penso che l'unica vera risposta sia che mentre un programmatore può ragionevolmente evitare le variabili locali inutilizzate e le importazioni, sarebbe troppo difficile costruire qualcosa se non si potesse mai compilare una funzione o un tipo di helper inutilizzato. – LinearZoetrope

risposta

2

Credo che questa sia una combinazione di ambito e l'interfaccia di default {}.

Questa è la stessa ragione per cui è possibile dichiarare una variabile a livello di pacchetto non utilizzata e il codice verrà creato correttamente.

Questo frammento è perfettamente valido codice Go:

package main 
import (
    "fmt" 
    "time" 
) 

var (
    testVar = "sup" 
) 

func main() { 
    start := time.Now() 

    fmt.Println("This sure was a test") 

    //Mon Jan 2 15:04:05 -0700 MST 2006 
    fmt.Println("Finished!\nTimeElapsed:", time.Since(start)) 
} 

Anche se la variabile testVar non viene mai utilizzato.

Qui ci sono diverse domande correlate e penso che abbiano tutte la stessa risposta generale.

  • Perché le variabili non utilizzate non sono consentite?
  • Perché i parametri di funzione non utilizzati sono consentiti se le variabili non utilizzate non lo sono?
  • Perché sono consentite le funzioni/le strutture non utilizzate?

...

La risposta generale è che le variabili non utilizzate nel campo di applicazione di una funzione sono sempre o una perdita di tempo compilatore, o un errore di legittima - in modo che non sono strettamente ammessi.

Tuttavia, i parametri di funzione non utilizzati, così come le strutture e le funzioni private, possono soddisfare un'interfaccia. Per lo meno, TUTTI soddisfano l'interfaccia predefinita {}. E come tali, non sono affatto garantiti come errori ..

Non sembra esserci alcuna documentazione ufficiale che descriva il ragionamento dietro questo particolare angolo della filosofia golang, ma come sottolineato in the answer to a similar question si potrebbe avere migliore fortuna nel trovare risposte e porre domande sul golang-nuts forum.

Spero che questo aiuti!

Problemi correlati