Co to jest", " (podkreślenie przecinka) w deklaracji Go?
A ja chyba nie rozumiem tego typu deklaracji zmiennych:
_, prs := m["example"]
Co dokładnie robi "_,
" i dlaczego zadeklarowali taką zmienną zamiast
prs := m["example"]
(znalazłem to jako część przejdź przez przykład: Maps )
8 answers
Pozwala uniknąć konieczności deklarowania wszystkich zmiennych dla zwracanych wartości.
Nazywa się to pusty identyfikator.
Jak w:
_, y, _ := coord(p) // coord() returns three values; only interested in y coordinate
W ten sposób nie musisz deklarować zmiennej, której nie użyjesz: Go na nią nie zezwoli. Zamiast tego, użyj'_', aby zignorować tę zmienną.
(inny przypadek użycia "_
" dotyczy importu )
Ponieważ odrzuca zwracaną wartość, jest to pomocne, gdy chcesz sprawdzić tylko jedną ze zwracanych wartości, jak w " Jak sprawdzić istnienie klucza na mapie?" pokazany w "efektywny Przejdź, Mapa":
_, present := timeZone[tz]
Aby sprawdzić obecność na mapie bez martwienia się o rzeczywistą wartość, możesz użyć pustego identyfikatora, prostego podkreślenia (
_
).
Pusty identyfikator może być przypisany lub zadeklarowany dowolną wartością dowolnego typu, z wartością odrzuconą bez szkody.
Aby sprawdzić obecność na mapie, Użyj pustego identyfikatora zamiast zwykłej zmiennej dla wartości.
Jako Jsor dodaje w komentarzach :
"ogólnie przyjętym standardem" jest wywołanie zmiennych testowych członkostwa " ok " (to samo dla sprawdzenia, czy odczyt kanału był poprawny, czy nie)
Który pozwala połączyć go 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 drugiej pozycji w zakresie (wartość), Użyj pustego identyfikatora, podkreślenia, aby odrzucić pierwszy:
sum := 0
for _, value := range array {
sum += value
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-06 00:38:17
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 "i declared and not used".
Ponieważ nie używamy i wewnątrz naszej pętli, musimy zmienić to na to:
for _, value := range x {
total += value
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-03 12:26:04
_
jest pustym identyfikatorem. Oznacza to, że wartość, którą należy przypisać, jest odrzucana.
Tutaj jest to wartość example
klucza, który jest odrzucany. Druga linia kodu odrzuci wartość logiczną presence i zapisze wartość w prs
.
Tak więc, aby sprawdzić tylko obecność na mapie, możesz odrzucić wartość. Można to wykorzystać do użycia mapy jako zestawu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-04 10:14:23
Pusty identyfikator może być używany, gdy składnia wymaga nazwy zmiennej, ale logika programu nie, na przykład do odrzucenia niechcianego indeksu pętli, gdy wymagamy tylko wartości elementu.
Fragment Z:
The Go Programming Language (Addison-Wesley Professional Computing Series)
Brian W. Kernighan]}Ten materiał może być chroniony prawem autorskim.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-14 05:21:40
Jest nazywany pustym identyfikatorem i pomaga w przypadkach, gdy chcesz odrzucić wartość, która ma zostać zwrócona, a nie odwoływać się do niej
Niektóre miejsca, w których go używamy:
- funkcja zwraca wartość i nie zamierzasz jej używać w future
- chcesz iterować i potrzebujesz wartości i, której nie będziesz using
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-28 00:32:25
Zasadniczo, _,
znany jako pusty identyfikator. W GO nie możemy mieć zmiennych, które nie są używane.
Jako przykład podczas iteracji przez tablicę, jeśli używasz value: = range nie chcesz wartości i do iteracji. Ale jeśli pominiesz wartość i, zwróci błąd. Ale jeśli zadeklarujesz, że nie użyłem go, zwróci również błąd.
Dlatego jest to miejsce, w którym musimy użyć _,
.
Jest również używany, gdy nie chce zwracać wartości funkcji w przyszłości.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-03 02:11:39
Najlepszym przypadkiem użycia nieużywanej zmiennej jest sytuacja, w której potrzebne jest tylko częściowe wyjście. W poniższym przykładzie musimy tylko wydrukować wartość (populacja stanu).
package main
import (
"fmt"
)
func main() {
statePopulations := map[string]int{
"California": 39250017,
"Texas": 27862596,
"Florida": 20612439,
}
for _, v := range statePopulations {
fmt.Println(v)
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-11 00:23:35
Nieużywana zmienna jest niedozwolona w Golang
Jeśli pochodzicie z innych języków programowania, może to wydawać się trochę trudne do przyzwyczajenia. Ale to skutkuje bardziej czystszym kodem. Więc używając _
mówimy, że wiemy, że istnieje zmienna, ale nie chcemy jej używać i mówimy kompilatorowi, który nie narzeka na to. :)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-27 09:33:36