I wydaje mi się, że nie rozumiem tego rodzaju deklaracji zmiennej:
_, prs := m["example"]
Co dokładnie „ _,
” robi i dlaczego zamiast tego zadeklarowali taką zmienną
prs := m["example"]
(Znalazłem to jako część Go by Example: Maps )
I wydaje mi się, że nie rozumiem tego rodzaju deklaracji zmiennej:
_, prs := m["example"]
Co dokładnie „ _,
” robi i dlaczego zamiast tego zadeklarowali taką zmienną
prs := m["example"]
(Znalazłem to jako część Go by Example: Maps )
prs
prawdopodobnie oznacza „obecny”. Kod w przykładzie jest sprawdzanie pod kątem obecności lub braku wpisu do "example"
w m
mapie.
Odpowiedzi:
Pozwala to uniknąć konieczności deklarowania wszystkich zmiennych dla zwracanych wartości.
Nazywa się to pustym identyfikatorem .
Jak w:
_, y, _ := coord(p) // coord() returns three values; only interested in y coordinate
( drugi _
przypadek użycia dotyczy importu )
Ponieważ odrzuca wartość zwracaną, jest to przydatne, gdy chcesz sprawdzić tylko jedną ze zwracanych wartości, jak w sekcji „ Jak sprawdzić istnienie klucza na mapie? ” Pokazanej w sekcji „ Efektywne przejście, mapa ”:
_, present := timeZone[tz]
Aby przetestować obecność na mapie bez martwienia się o rzeczywistą wartość, możesz użyć pustego identyfikatora, prostego podkreślenia (
_
).
Pustemu identyfikatorowi można przypisać lub zadeklarować dowolną wartość dowolnego typu, z wartością odrzuconą w nieszkodliwy sposób.
Aby sprawdzić obecność na mapie, użyj pustego identyfikatora zamiast zwykłej zmiennej wartości.
Jak dodaje Jsor w komentarzach :
„ogólnie przyjętym standardem” jest wywołanie zmiennych testowych członkostwa „ok” (to samo dotyczy sprawdzania, czy odczyt kanału był prawidłowy, czy nie)
To pozwala połączyć to z testem:
if _, err := os.Stat(path); os.IsNotExist(err) {
fmt.Printf("%s does not exist\n", path)
}
Znajdziesz go również w pętli:
Jeśli potrzebujesz tylko drugiego elementu z zakresu (wartości), użyj pustego identyfikatora, podkreślenia, aby odrzucić pierwszy:
sum := 0
for _, value := range array {
sum += value
}
Kompilator Go nie pozwala na tworzenie zmiennych, których nigdy nie używasz.
for i, value := range x {
total += value
}
Powyższy kod zwróci komunikat o błędzie „zadeklarowałem i nie używam”.
Ponieważ nie używamy i wewnątrz naszej pętli, musimy to zmienić na to:
for _, value := range x {
total += value
}
_
jest pustym identyfikatorem. Oznacza to, że wartość, którą należy przypisać, jest odrzucana.
Tutaj wartość example
klucza jest odrzucana. Druga linia kodu odrzuciłaby wartość logiczną obecności i zapisałaby wartość w prs
.
Aby sprawdzić tylko obecność na mapie, możesz odrzucić wartość. Można to wykorzystać do użycia mapy jako zestawu.
Pustego identyfikatora można użyć, gdy składnia wymaga nazwy zmiennej, ale logika programu nie wymaga, na przykład w celu odrzucenia niechcianego indeksu pętli, gdy potrzebujemy tylko wartości elementu.
Fragment:
Język programowania Go (seria Addison-Wesley Professional Computing)
Brian W. Kernighan
Ten materiał może być chroniony prawem autorskim.
Nazywa się to pustym identyfikatorem i pomaga w przypadkach, gdy chcesz odrzucić wartość, która ma zostać zwrócona i nie odwoływać się do niej
Niektóre miejsca, w których go używamy:
Zasadniczo _,
znany jako pusty identyfikator. W GO nie możemy mieć zmiennych, które nie są używane.
Na przykład podczas iteracji po tablicy, jeśli używasz value: = range , nie chcesz, aby wartość i była iterowana. Ale jeśli pominiesz wartość i, zwróci błąd. Ale jeśli zadeklarujesz i i nie użyłeś go, również zwróci błąd.
Dlatego jest to miejsce, z którego musimy skorzystać _,
.
Jest również używany, gdy nie chcesz w przyszłości zwracać wartości funkcji.
Świetnym przypadkiem użycia nieużywanej zmiennej jest sytuacja, w której potrzebujesz tylko częściowego wyniku. W poniższym przykładzie wystarczy wydrukować wartość (stan populacji).
package main
import (
"fmt"
)
func main() {
statePopulations := map[string]int{
"California": 39250017,
"Texas": 27862596,
"Florida": 20612439,
}
for _, v := range statePopulations {
fmt.Println(v)
}
}
Niewykorzystana zmienna nie jest dozwolona w Golangu
Jeśli pochodzisz z innych języków programowania, może to być trudne przyzwyczajenie się do tego. Ale to skutkuje bardziej przejrzystym kodem. Więc używając a, _
mówimy, że wiemy, że jest tam zmienna, ale nie chcemy jej używać i mówimy kompilatorowi, że mi na to nie narzeka. :)