Sobes.tech
Junior — Middle

Μπορεί κανείς να έχει πρόσβαση σε μια μεταβλητή που δηλώνεται μέσα σε μια συνάρτηση από έξω από το πεδίο ορατότητάς της;

sobes.tech AI

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

Στο Go, μια μεταβλητή που δηλώνεται μέσα σε μια συνάρτηση έχει τοπική εμβέλεια και δεν είναι άμεσα προσβάσιμη έξω από αυτήν.

Ωστόσο, μπορεί να αποκτήσει πρόσβαση στην τιμή της μεταβλητής από έξω μέσω κλεισίματος (closures) ή επιστρέφοντας την τιμή από τη συνάρτηση.

Παράδειγμα με κλείσιμο:

func μετρητής() func() int {
    μετρητής := 0
    return func() int {
        μετρητής++
        return μετρητής
    }
}

func main() {
    c := μετρητής()
    fmt.Println(c()) // 1
    fmt.Println(c()) // 2
}

Εδώ, η μεταβλητή μετρητής δηλώνεται μέσα στη συνάρτηση μετρητής, αλλά είναι προσβάσιμη μέσω της επιστρεφόμενης συνάρτησης.

Χωρίς αυτές τις μεθόδους, δεν υπάρχει άμεση πρόσβαση στη τοπική μεταβλητή από έξω από τη συνάρτηση.