Junior — Middle
Μπορείτε να εξηγήσετε τις διαφορές μεταξύ των τελεστών new και make στη γλώσσα Go;
sobes.tech AI
Απάντηση από AI
Στη Go, οι τελεστές new και make χρησιμοποιούνται για την κατανομή μνήμης, αλλά εφαρμόζονται σε διαφορετικούς τύπους και έχουν διαφορετικούς σκοπούς:
-
new(T) καταχωρεί μνήμη για τον τύπο T, την αρχικοποιεί με την τιμή μηδέν και επιστρέφει έναν δείκτη *T. Χρησιμοποιείται για όλους τους τύπους, αλλά επιστρέφει δείκτη.
-
make(T, args...) χρησιμοποιείται μόνο για την αρχικοποίηση slices, χαρτών (map) και καναλιών (chan). Επιστρέφει μια αρχικοποιημένη τιμή του τύπου T (όχι δείκτη).
Παράδειγμα:
p := new(int) // p έχει τύπο *int, δείχνει στο 0
s := make([]int, 5) // s είναι ένα slice μήκους 5, έτοιμο για χρήση
m := make(map[string]int) // αρχικοποιημένος χάρτης
Σύνοψη:
- new — καταχωρεί μνήμη και επιστρέφει δείκτη.
- make — αρχικοποιεί σύνθετες δομές δεδομένων και επιστρέφει την τιμή.