W Golang próbuję utworzyć funkcję plasterka dla mojego problemu z komiwojażera. Robiąc to, zauważyłem, że gdy zacząłem edytować plaster, dałem, że funkcja mieszania była inna za każdym razem, gdy ją przekazywałem.Czy plasterki golang przechodzą przez wartość?
Po pewnym debugowaniu dowiedziałem się, że to przeze mnie edytowanie plasterka wewnątrz funkcji. Ale ponieważ Golang ma być językiem "przekazywać wartości", jak to możliwe?
https://play.golang.org/p/mMivoH0TuV
mam pod warunkiem link zabaw, aby pokazać, co mam na myśli. Po usunięciu linii 27 otrzymasz inne wyjście niż pozostawienie go, nie powinno to mieć znaczenia, ponieważ funkcja powinna tworzyć własną kopię przekroju, gdy zostanie przekazana jako argument.
Czy ktoś może wyjaśnić to zjawisko?
więc rozwiązanie być wykonaniem lokalnej kopii plasterka wewnątrz funkcji. i zamiast tego edytować? – duck
@ user4901806 Jeśli nie chcesz modyfikować elementów przekazanego plasterka (elementy tablicy podkładu wskazuje na), a następnie tak, utwórz kopię. – icza
Zakładam, że oznaczałoby to, że jeśli dodamy element, nie zostanie on dodany do oryginalnego plasterka. – Sahas