Sobes.tech
Junior — Middle

Πώς περνάμε ένα slice σε μια συνάρτηση σε μια γλώσσα προγραμματισμού;

sobes.tech AI

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

Στη γλώσσα Go, ένα slice περνάει σε μια συνάρτηση με τιμή, αλλά το slice περιέχει έναν δείκτη σε έναν πίνακα, καθώς και το μήκος και τη χωρητικότητά του. Αυτό σημαίνει ότι, όταν περνάμε ένα slice σε μια συνάρτηση, αντιγράφεται η δομή του slice, αλλά δεν αντιγράφονται τα δεδομένα του πίνακα στον οποίο δείχνει.

Λόγω αυτού, οι αλλαγές στα στοιχεία του slice μέσα στη συνάρτηση αντικατοπτρίζονται στον αρχικό πίνακα, αλλά η αλλαγή του ίδιου του slice (π.χ. ανάθεση ενός νέου slice) δεν επηρεάζει το εξωτερικό slice.

Παράδειγμα:

package main
import "fmt"

func modifySlice(s []int) {
    s[0] = 100       // θα αλλάξει το στοιχείο του αρχικού πίνακα
    s = append(s, 200) // θα αλλάξει το τοπικό slice, το εξωτερικό δεν θα επηρεαστεί
}

func main() {
    s := []int{1, 2, 3}
    modifySlice(s)
    fmt.Println(s) // Θα εκτυπώσει: [100 2 3]
}

Έτσι, το slice περνάει με τιμή, αλλά χάρη στον εσωτερικό δείκτη, οι αλλαγές στα στοιχεία είναι ορατές εκτός της συνάρτησης.