Pytałem, dlaczego programiści mieliby sami pisać takie popularne funkcje? Chodzi mi o to, że jeśli chcę inną funkcję dla wartości zmiennoprzecinkowych, będę zmuszony skopiować / wkleić tę funkcję. To wyglądało dla mnie dziwnie. Ale Krzysztof Kowalczyk już odpowiedział, że to dlatego, że golang nie ma generyków.
Dzięki. Ale jestem trochę przytłoczony :) Wiele razy słyszałem od osób używających golanga, że jest on bardzo dobrze zaprojektowany, aby zwiększyć produktywność programisty. A programy go wyglądają równie ładnie jak te w Pythonie :) Dlaczego więc nie ma powszechnego sposobu na wykonanie tak powszechnego zadania? Chodzi mi o to, że jeśli chcesz sprawdzić, czy kontener ma element, możesz po prostuif element in collection: do_something()
Techniczna odpowiedź brzmi: ponieważ Go nie ma typów ogólnych. Gdyby tak było (i być może w przyszłości będzie je mieć), mógłbyś napisać ogólny IndexInSlice, który działa na każdym typie, który implementuje ==. Nakładanie kapelusza rzecznika Go: chodzi o przeciętne doświadczenie. Nie możesz oczekiwać, że jeden język pod każdym względem pokona każdy inny język. Go jest znacznie bardziej produktywne niż C, C ++, może nawet Java lub C # i jest zbliżone do Pythona. To połączenie produktywności programisty i natywnego generowania kodu (tj. Szybkości) sprawia, że jest atrakcyjny.
@OCyril Musisz napisać własne generyczne i zbudować własną bibliotekę lub przeprowadzić badania i znaleźć coś, co odpowiada Twoim potrzebom. Na najniższym poziomie funkcja „znajdź wartość = x w tablicy” (PHP, Python lub cokolwiek) będzie wyglądać podobnie do wersji podanej w pytaniu OP - na niskim poziomie. Pętle mają zasadnicze znaczenie dla tego rodzaju programowania, nawet jeśli są ukryte. Go nie ukrywa tych rzeczy.
Nie sądzę, -1aby zwracanie po błędzie było idiomatyczne, zamiast tego należy użyć wielokrotnego powrotu. (Jestem nowy w golang, ale to właśnie przeczytałem)
Inną opcją jest posortowanie plasterka za pomocą pakietu sortowania, a następnie wyszukanie rzeczy, której szukasz:
package main
import("sort""log")var ints =[...]int{74,59,238,-784,9845,959,905,0,0,42,7586,-5467984,7586}
func main(){
data := ints
a := sort.IntSlice(data[0:])
sort.Sort(a)
pos := sort.SearchInts(a,-784)
log.Println("Sorted: ", a)
log.Println("Found at index ", pos)}
wydruki
2009/11/1023:00:00Sorted:[-5467984-78400425974238905959758675869845]2009/11/1023:00:00Found at index 1
Działa to dla podstawowych typów i zawsze możesz zaimplementować interfejs sortowania dla własnego typu, jeśli potrzebujesz popracować nad kawałkiem innych rzeczy. Zobacz http://golang.org/pkg/sort
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.