Junior — Middle
Ποια δεδομένα μέσα στο slice περνιούνται κατά την κλήση της λειτουργίας με αυτό το slice ως όρισμα;
sobes.tech AI
Απάντηση από AI
Στη Go, ένα slice είναι μια δομή που περιέχει τρία πεδία: έναν δείκτη σε έναν πίνακα, ένα μήκος και μια χωρητικότητα. Όταν περνάει ένα slice σε μια συνάρτηση, αντιγράφεται μόνο αυτή η δομή, όχι ολόκληρος ο πίνακας δεδομένων.
Δηλαδή, κατά την κλήση μιας συνάρτησης, το slice περνάει από τιμή, αλλά αντιγράφονται μόνο τα μεταδεδομένα (δείκτης, μήκος, χωρητικότητα), όχι τα στοιχεία του πίνακα. Αυτό σημαίνει ότι μέσα στη συνάρτηση, το slice δείχνει στον ίδιο βασικό πίνακα, και οι αλλαγές στα στοιχεία του slice μέσα στη συνάρτηση θα φαίνονται και έξω.
Παράδειγμα:
func modify(slice []int) {
slice[0] = 100 // αλλάζουμε το πρώτο στοιχείο
}
func main() {
s := []int{1, 2, 3}
modify(s)
fmt.Println(s) // θα εμφανίσει [100 2 3]
}
Έτσι, κατά την passing ενός slice σε μια συνάρτηση, αντιγράφονται μόνο τα τρία πεδία της δομής του slice, ενώ τα δεδομένα του πίνακα παραμένουν κοινά.