2016-05-06 15 views
6

Came attraverso la funzione seguente here. Ho notato che l'ultimo parametro è identificato con _. Qual è l'intento di questo modello?Significato del trattino basso in un parametro della funzione Go

func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { 
    fmt.Fprint(w, "Welcome!\n") 
} 
+1

Domande correlate: 1. [Ottenere i nomi dei parametri del metodo in Golang] (http://stackoverflow.com/questions/31377433/getting-method-parameter-names-in-golang); 2. [Perché Go consente la compilazione di parametri di funzione non utilizzati?] (Http://stackoverflow.com/questions/22549228/why-does-go-allow-compilation-of-unused-function-parameters) – icza

risposta

7

Significa "ignora che il parametro", la ragione che hanno ancora bisogno l'ultimo parametro qui è perché vogliono far passare come type Handle alla funzione GET, che ha la firma:

type Handle func(http.ResponseWriter, *http.Request, Params)

Se si passa semplicemente qualcosa come func Index(w http.ResponseWriter, r *http.Request) non verrà considerato come type Handle.

5

_ è il blank identifier. È nella firma per mostrare che il valore non viene utilizzato, quindi la firma corrisponderà comunque ai metodi dell'interfaccia.

1

Come altri hanno sottolineato, è un blank identifier. Per esempio, si consideri il seguente esempio:.

func main() { 
    nums := []int{5, 3, 4} 
    max := nums[0] 
    for _, num := range nums { 
     if num > max { 
      max = num 
     } 
    } 
    fmt.Println("max:", max) 
} 

Se non si ha intenzione di utilizzare un valore di indice, si può semplicemente ignorare la memorizzazione utilizzando _ al posto di un nome di variabile =.

+1

La domanda dell'OP è circa il parametro di funzione. Non penso che tu stia rispondendo alla domanda. – Akavall

0

L'utilizzo di "_" al posto di un nome parametro soddisfa gli obblighi di una funzione di livello superiore come parametro "senza ricevere un avviso su un parametro non utilizzato. Nel tuo caso, credo che al compilatore venga detto di ignorare tutti i dati "POST" in arrivo, riducendo così la richiesta alla funzionalità di un "GET".