Sobes.tech
Junior — Middle

Ποιες ενέργειες επιτρέπονται κατά την εργασία με ένα slice σε Go αν δεν έχει αρχικοποιηθεί ρητά;

sobes.tech AI

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

Στο Go, αν ένα slice δεν έχει αρχικοποιηθεί ρητά (δηλαδή, έχει την τιμή nil), μπορούν να γίνουν τα εξής:

  • Έλεγχος αν είναι nil (π.χ., if slice == nil), κάτι που είναι χρήσιμο για τον προσδιορισμό αν το slice έχει αρχικοποιηθεί.
  • Λήψη μήκους και χωρητικότητας με len(slice) και cap(slice). Για ένα nil slice, το μήκος και η χωρητικότητα είναι 0.
  • Χρήση του τελεστή append για την προσθήκη στοιχείων. Το append θα δημιουργήσει αυτόματα ένα νέο slice με κατανεμημένη μνήμη αν το αρχικό slice είναι nil.

Ωστόσο, δεν μπορείτε να προσπελάσετε στοιχεία του slice με δείκτη αν είναι nil ή κενό, καθώς αυτό θα προκαλέσει panic.

Παράδειγμα:

var s []int // s == nil
fmt.Println(s == nil) // true
fmt.Println(len(s))   // 0
s = append(s, 1)      // τώρα το s έχει αρχικοποιηθεί και περιέχει [1]