Sobes.tech
Middle+

Τι είναι ένα slice στο Go; Πώς διαφέρουν τα len και cap;

sobes.tech AI

Απάντηση από AI

Ένα slice στο Go είναι μια δυναμική και μεταβλητή οπτική αναπαράσταση μιας ακολουθίας στοιχείων του ίδιου τύπου, βασισμένη σε έναν πίνακα. Το slice περιέχει έναν δείκτη στον βασικό πίνακα, το μήκος (len) και τη χωρητικότητα (cap).

  • len(slice) — ο αριθμός των στοιχείων που είναι προσβάσιμα στο slice, δηλαδή το μήκος του slice.
  • cap(slice) — ο μέγιστος αριθμός στοιχείων που μπορεί να περιέχει το slice χωρίς να κατανεμηθεί επιπλέον μνήμη, δηλαδή το μέγεθος του βασικού πίνακα από την αρχή του slice.

Παράδειγμα:

arr := [5]int{1, 2, 3, 4, 5}
s := arr[1:3] // slice των στοιχείων με δείκτες 1 και 2
fmt.Println(len(s)) // 2
fmt.Println(cap(s)) // 4 (από τον δείκτη 1 μέχρι το τέλος του πίνακα)

Έτσι, το len καθορίζει το τρέχον μήκος του slice, και το cap — πόσα στοιχεία μπορούν να προστεθούν χωρίς ανακατανομή μνήμης.