2016-05-06 10 views
6

Przenieś do poniższej funkcji here. Zauważyłem, że ostatni parametr jest identyfikowany z _. Jaki jest zamysł tego wzoru?Znaczenie podkreślenia w parametrze funkcji Go

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

Pytania pokrewne: 1. [Pobieranie nazw parametrów metod w Golang] (http://stackoverflow.com/questions/31377433/getting-method-parameter-names-in-golang); 2. [Dlaczego Go zezwala na kompilację nieużywanych parametrów funkcji?] (Http://stackoverflow.com/questions/22549228/why-does-go-allow-compilation-of-unused-function-parameters) – icza

Odpowiedz

7

To znaczy „zignorować ten parametr”, powód, że wciąż potrzeba ostatni parametr tutaj dlatego, że chcą przekazać go jako type Handle do funkcji GET, która ma podpis:

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

Jeśli po prostu przekazujesz coś takiego, jak func Index(w http.ResponseWriter, r *http.Request), nie będzie ono traktowane jako type Handle.

5

_ to blank identifier. Jest w podpisie, aby pokazać, że wartość nie jest używana, więc podpis nadal będzie zgodny z metodami interfejsu.

1

Jak inni podkreślili, jest to blank identifier. Na przykład, rozważmy następujący przykład.

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

Jeśli nie zamierzasz korzystać z wartości indeksu, można po prostu zignorować przechowywania go za pomocą _ zamiast nazwy zmiennej =.

+1

Pytanie OP brzmi: o parametrze funkcji. Nie sądzę, że odpowiadasz na to pytanie. – Akavall

0

Użycie "_" zamiast nazwy parametru spełnia obowiązki "funkcji wyższego poziomu" jako parametru, bez otrzymania ostrzeżenia o nieużywanym parametrze. W twoim przypadku, wierzę, że kompilator ma ignorować wszystkie przychodzące dane "POST", co w efekcie ogranicza żądanie do funkcji "GET".