Εξέλιξη Κομματιού
1. Εισαγωγή στο Go
- Τι είναι το Go (Golang);
- Ιστορία και φιλοσοφία σχεδιασμού του Go
- Το Go ως γλώσσα προγραμματισμού web και συστημάτων
- Βασικά χαρακτηριστικά:
- Στατικό τύποισμα
- Απλότητα και αναγνωσιμότητα
- Γρήγορη μεταγλώττιση
- Ενσωματωμένη παράλληλη εκτέλεση (concurrency)
- Συλλογή αποβλήτων (garbage collection)
- Μεταγλώττιση σε πολλές πλατφόρμες (cross-platform)
- Κοινές χρήσεις του Go
- Πλεονεκτήματα και περιορισμοί του Go
- Σύγκριση του Go με C/C++, JavaScript, Ruby, Python και Java
- Κατανόηση της οικογένειας λογισμικού του Go
- Σύνοψη της τυπικής βιβλιοθήκης του Go
- Μονάδες Go (Go modules) και διαχείριση εξαρτήσεων
- Ανατομία μιας εφαρμογής Go
- Πρακτική άσκηση: Εξέταση και εκτέλεση ενός απλού προγράμματος Go
2. Ρύθμιση του Περιβάλλοντος Ανάπτυξης Go
- Εγκατάσταση του Go
- Κατανόηση της συσκευής εργαλείων Go (toolchain)
- Ρύθμιση μεταβλητών περιβάλλοντος
- Επιλογή IDE ή επεξεργαστή κώδικα
- Χρήση γραμμής εντολών με Go
- Δημιουργία χώρου εργασίας Go
- Κατανόηση της δομής έργου Go
- Εκκίνηση έργου με Go Modules
- Χρήση της εντολής
go mod init - Διαχείριση εξαρτήσεων με
go get - Ενημέρωση και έλεγχος εξαρτήσεων
- Διαμόρφωση πηγαίου κώδικα με
gofmt - Εκτέλεση προγραμμάτων με
go run - Δημιουργία εφαρμογών με
go build - Εγκατάσταση εφαρμογών Go
- Σταυρωτή μεταγλώττιση (cross-compiling) εφαρμογών
- Πρακτική άσκηση: Δημιουργία και ρύθμιση έργου Go μέσα σε δοχείο (container)
3. Μεταβλητές, Σταθερές και Τύποι στο Go
- Διακήρυξη μεταβλητών
- Σημαντικοί έναντι συμπεραφώντες τύποι
- Σύντομες διακηρύξεις μεταβλητών
- Σταθερές
- Μηδενικές τιμές
- Εμβέλεια και διάρκεια ζωής μεταβλητών
- Πρωταρχικοί τύποι δεδομένων:
- Ακέραιοι αριθμοί
- Αριθμοί κινητής υποδιαστολής
- Πλεγματικοί αριθμοί
- Μοναδικά (Booleans)
- Χαρακτήρες (Strings)
- Μετατροπές τύπων
- Εργασία με Unicode και UTF-8
- Runes και bytes
- Πολλαπλή ανάθεση μεταβλητών
- Κατανόηση της ασφάλειας τύπων
- Άσκηση: Δημιουργία ενός μικρού προγράμματος επεξεργασίας δεδομένων στη γραμμή εντολών
4. Θέτες και Εκφράσεις
- Αριθμητικοί θέτες
- Θέτες σύγκρισης
- Λογικοί θέτες
- Θέτες ανάθεσης
- Αύξηση και μείωση
- Προτεραιότητα θέτων
- Εργασία με ακέραιες και κινητής υποδιαστολής πράξεις
- Αποφυγή συνηθισμένων σφαλμάτων μετατροπής τύπων
- Άσκηση: Υλοποίηση υπολογισμών και λογικής επικύρωσης
5. Ημερομηνίες, Χρόνος και Διαμόρφωση
- Χρήση του πακέτου
time - Δημιουργία και χειρισμός ημερομηνιών
- Λήψη τρέχουσας ώρας
- Ζώνες ώρας και τοποθεσίες
- Ερμηνεία ημερομηνιών και χρόνων
- Διαμόρφωση ημερομηνιών και χρόνων
- Υπολογισμός διάρκειας
- Εργασία με σφραγίδες Unix
- Χειρισμός χρονικών ορίων (timeouts)
- Άσκηση: Προσθήκη σφραγίδων χρόνου και υπολογισμών διάρκειας σε εφαρμογή
6. Πίνακες, Τομές, Χαρτογράφημα και Δομές
Πίνακες
- Διακήρυξη πινάκων
- Προαραίτηση πινάκων
- Διαχείριση πινάκων
- Πολυδιάστατοι πίνακες
Τομές (Slices)
- Κατανόηση τομών έναντι πινάκων
- Δημιουργία τομών
- Προσθήκη στοιχείων
- Αντιγραφή τομών
- Μήκος και ικανότητα τομών
- Τομές των τομών
- Συνηθισμένα σφάλματα στις τομές
Χαρτογράφημα (Maps)
- Δημιουργία χαρτογραφημάτων
- Προσθήκη και αφαίρεση εγγραφών
- Έλεγχος ύπαρξης κλειδιού
- Διαχείριση χαρτογραφημάτων
- Χαρτογράφημα που περιέχουν σύνθετα δεδομένα
Δομές (Structs)
-
Ορισμός δομών
-
Πεδία δομών
-
Προαραίτηση δομών
-
Νεστρωμένες δομές
-
Ανώνυμες δομές
-
Μέθοδοι δομών
-
Ετικέτες JSON για δομές
-
Πρακτική άσκηση: Μοντελοποίηση χρηστών, προϊόντων και δεδομένων εφαρμογής χρησιμοποιώντας δομές, τομές και χαρτογραφήματα
7. Συνθήκη Λογικής και Βρόχοι
- Εντολές
if elseκαιelse if- Διακήρυξη μεταβλητών μέσα σε συνθήκες
- Βρόχοι
for - Άπειροι βρόχοι
- Συνθήκες βρόχου
breakκαιcontinue- Διαχείριση με
range - Νεστρωμένοι βρόχοι
- Εντολές
switch - Switch βασισμένο σε εκφράσεις
- Πολλαπλές περιπτώσεις
- Προεπιλεγμένες περιπτώσεις
- Type switches
- Άσκηση: Υλοποίηση λογικής επικύρωσης και επεξεργασίας εφαρμογής
8. Λειτουργίες (Functions)
- Ορισμός λειτουργιών
- Παράμετροι λειτουργιών
- Επιστροφικές τιμές
- Πολλαπλές επιστροφικές τιμές
- Ονομασμένες επιστροφικές τιμές
- Μεταβλητικές λειτουργίες (Variadic functions)
- Ανώνυμες λειτουργίες
- Τιμές λειτουργιών
- Κλείστες (Closures)
- Αναδρομική λειτουργία
- Πέρασμα λειτουργιών ως οριζόμενα
- Λειτουργίες που επιστρέφουν σφάλματα
- Σχεδιασμός μικρών, επαναχρησιμοποιήσιμων λειτουργιών
- Άσκηση: Επικατασκευή υπάρχοντος κώδικα σε επαναχρησιμοποιήσιμες λειτουργίες
9. Συμβολιστές (Pointers) και Έννοιες Μνήμης
- Τι είναι ένας συμβολιστής;
- Θέτες διευθύνσεως και αποσυνδέσεως (dereference)
- Συμβολιστές και παράμετροι λειτουργιών
- Δομικά σημεία λήψης (Pointer receivers)
- Συμβολιστές προς δομές
- Nil συμβολιστές
- Πότε να χρησιμοποιείτε συμβολιστές
- Σημασιολογία τιμής έναντι αναφοράς
- Κατανόηση της διαχείρισης μνήμης και συλλογής αποβλήτων του Go
- Συνηθισμένα σφάλματα συμβολιστών
- Πρακτική άσκηση: Τροποποίηση δεδομένων εφαρμογής χρησιμοποιώντας συμβολιστές
10. Δημιουργία Web Εφαρμογής σε Go
- Σύνοψη των ικανοτήτων web του Go
- Εισαγωγή στο πακέτο
net/http - Δημιουργία διακομιστή HTTP
- Αιτήματα HTTP και απαντήσεις
- Μέθοδοι HTTP
- Διευθύνσεις URL αιτήματος και παράμετροι ερωτήσεως
- Κεφαλίδες HTTP
- Κώδικες κατάστασης HTTP
- Βασικές έννοιες διαδρομής (routing)
- Δημιουργία διαχειριστών (handlers)
- Χειρισμός δεδομένων φόρμας
- Προσφορά στατικών αρχείων
- Εργασία με πρότυπα HTML
- Μεταβλητές πρότυπων και δομές ελέγχου
- Δομή web εφαρμογής
- Πρακτική άσκηση: Δημιουργία βασικού διακομιστή web σε Go
11. Δημιουργία RESTful Υπηρεσίας Web
- Βασικές αρχιτεκτονικές REST
- Σχεδιασμός σημείων πρόσβασης API
- GET, POST, PUT, PATCH και DELETE
- Εργασία με JSON
- Κωδικοποίηση και αποκωδικοποίηση JSON
- Επικύρωση αιτήματος
- Κώδικες κατάστασης HTTP
- Απαντήσεις σφάλματος
- Παράμετροι ερωτήσεως και παράμετροι διαδρομής
- Δομές απάντησης API
- Διαχωρισμός διαχειριστών από την επιχειρηματική λογική
- Πρακτική άσκηση: Δημιουργία CRUD REST API
12. Χειρισμός Εκτέλεσης, Μεταγλώττιση και Συναρτήσεις Ανάπτυξης Έργου Go
- Κατανόηση του μεταγλωττιστή Go
- Διαδικασία δημιουργίας (build process) του Go
go rungo buildgo installgo test- Σημαίες μεταγλώττισης (build flags)
- Ρύθμιση ειδικού περιβάλλοντος
- Δημιουργία για διαφορετικά λειτουργικά συστήματα και αρχιτεκτονικές
- Παραγωγή αυτόνομων δυαδικών αρχείων
- Διαχείριση ρυθμίσεων εφαρμογής
- Άσκηση: Μεταγλώττιση της εφαρμογής για πολλαπλές πλατφόρμες
13. Εργασία με Αρχεία και Web
- Άνοιγμα και κλείσιμο αρχείων
- Ανάγνωση αρχείων
- Εγγραφή αρχείων
- Δημιουργία καταλόγων
- Μεταδεδομένα αρχείων
- Προ-συνδεδεμένο I/O
- Εργασία με ροές (streams)
- Ανάγνωση και εγγραφή αρχείων JSON
- Πελάτες HTTP
- Δημιουργία εξερχόμενων αιτήσεων HTTP
- Χειρισμός σφαλμάτων πελάτη HTTP
- Χρονικά όρια (timeouts) και ακύρωση
- Επεξεργασία απαντήσεων API
- Πρακτική άσκηση: Ανάκτηση δεδομένων από εξωτερική API και τοπική διατήρησή τους
14. Χειρισμός Σφαλμάτων και Επεξεργασία Αποθρέσκειας (Debugging)
- Προσέγγιση σφαλμάτων του Go
- Επιστροφή σφαλμάτων από λειτουργίες
- Έλεγχος σφαλμάτων
- Δημιουργία προσαρμοσμένων σφαλμάτων
- Αμφιπλέγμασμα σφαλμάτων (Wrapping errors)
- Προσθήκη ngữ cảnh (context) στα σφάλματα
errors.Isκαιerrors.As- Εξαφάνιση (Panic) και ανάκτηση (recovery)
- Πότε να χρησιμοποιείτε
panic - Επεξεργασία κοινών προβλημάτων Go
- Ημερολόγιο δραστηριοτήτων εφαρμογής
- Χρήση εργαλείων αποσφαλμάτωσης Go
- Άσκηση: Διάγνωση και διόρθωση σκόπιμα εισαγόμενων σφαλμάτων εφαρμογής
15. Διεπαφές (Interfaces) και Αφαίρεση (Abstraction)
- Τι είναι μια διεπαφή;
- Συνοπτική υλοποίηση διεπαφής
- Ορισμός διεπαφών
- Τιμές διεπαφών
- Κενές διεπαφές /
any - Διεκρίσεις τύπων (Type assertions)
- Type switches
- Σημασιολογία τιμής έναντι σημασιολογίας αναφοράς
- Σχεδιασμός μικρών διεπαφών
- Αναίρεση εξαρτήσεων
- Χρήση διεπαφών για δοκιμές
- Μείωση σύζευξης (coupling) εφαρμογής
- Πρακτική άσκηση: Εισαγωγή διεπαφών στην παράδειγμα εφαρμογή web
16. Πακέτα (Packages) και Οργάνωση Έργου
- Δημιουργία πακέτων
- Συνήθειες ονοματοδοσίας πακέτων
- Εξωτερικά και εσωτερικά ονόματα (identifiers)
- Εισαγωγή πακέτων
- Εκκίνηση πακέτων
- Οργάνωση επιπέδων εφαρμογής
- Εσωτερικά πακέτα
- Διαχείριση εξαρτήσεων με Go Modules
- Σημασιολογική βεράκωση (Semantic versioning)
- Χρήση πακέτων τρίτων
- Αποφυγή κυκλικών εξαρτήσεων
- Σχεδιασμός συντηρήσιμων έργων Go
- Άσκηση: Επικατασκευή της εφαρμογής σε ξεχωριστά πακέτα
17. Παράλληλη Εκτέλεση με Goroutines
- Τι είναι παράλληλη εκτέλεση (concurrency);
- Goroutines
- Εκκίνηση goroutines
- Κατανόηση ελαφριάς παράλληλης εκτέλεσης
- Προκλήσεις συγχρονισμού
- Κοινοποιημένη κατάσταση
- Συνθήκες ανταγωνισμού (Race conditions)
- Χρήση
sync.WaitGroup - Αμοιβαίο αποκλεισμό (Mutexes) και ανάγνωση/εγγραφή mutexes
- Ατομικές λειτουργίες
- Πρακτική άσκηση: Μετατροπή μιας αλληλοπληθωμένης λειτουργίας σε παράλληλη επεξεργασία
18. Κανάλια (Channels)
- Κατανόηση καναλιών
- Αποστολή και λήψη τιμών
- Βοηθούμενα έναντι μη βοηθουμένων καναλιών
- Συμπεριφορά αποκλεισμού (Blocking behavior)
- Κλείσιμο καναλιών
- Διαχείριση μέσω range σε κανάλια
- Κανάλια κατεύθυνσης
- Επικοινωνία βασισμένη σε κανάλια
- Εντολές Select
- Χρονικά όρια (timeouts) και ακύρωση
- Στρατηγικές worker-pool
- Παράδειγμα παραγωγής/κατανάλωσης
- Πρακτική άσκηση: Δημιουργία συστήματος παράλληλων εργαζομένων
19. Πλαγία (Context) και Διαχείριση Αιτήσεων
- Γιατί οι πλαγίες (context) είναι σημαντικές σε web εφαρμογές
context.Context- Πλαγίες επιπέδου αιτήματος (Request-scoped context)
- Ακύρωση (Cancellation)
- Προθεσμίες (Deadlines)
- Χρονικά όρια (Timeouts)
- Διανομή πλαγίας μέσα από τα επίπεδα εφαρμογής
- Ακύρωση βάσης δεδομένων ή λειτουργιών HTTP
- Αποφυgence μελανώματος πλαγίας (context misuse)
- Άσκηση: Προσθήκη ακύρωσης αιτήματος και χρονικών ορίων (timeouts) στη web εφαρμογή
20. Δοκιμή Εφαρμογών Go
- Γιατί η αυτόματη δοκιμασία είναι σημαντική
- Συγγραφή δοκιμών μονάδων
- Το πακέτο
testing - Λειτουργίες δοκιμής
- Συνήθειες ονοματοδοσίας δοκιμών
- Δοκιμές οδηγούμενες από πίνακες (Table-driven tests)
- Δοκιμή σφαλμάτων
- Δοκιμή διαχειριστών HTTP
- Διακομιστές δοκιμών HTTP
- Φυσικά σενάρια δοκιμών (Test fixtures)
- Κάλυψη δοκιμών (Test coverage)
- Βηματοδρόμηση (Benchmarks)
- Δοκιμές παραδείγματος
- Δοκιμή διεπαφών με mock ή false
- Πρακτική άσκηση: Δημιουργία σετ δοκιμών για την παράδειγμα εφαρμογή
21. Βελτιστοποίηση Απόδοσης
- Κατανόηση απόδοσης εφαρμογών Go
- Προσδιορισμός φραγμών (bottlenecks)
- Επίδοση CPU έναντι μνήμης
- Αποτελεσματικές δομές δεδομένων
- Μείωση περιττών τοποθετήσεων (allocations)
- Χαρακτήρες, bytes και buffers
- Διαχείριση goroutines
- Αποφυgence υπερβολικής παράλληλης εκτέλεσης
- Στρατηγικές cache
- Παράδειγμα βάσης δεδομένων και δικτύου
- Προφίλισμα (Profiling) εφαρμογών
- Βηματοδρόμηση και δοκιμή απόδοσης
- Χρήση εργαλείων προφίλινγκ Go
- Άσκηση: Προφίλισμα και βελτιστοποίηση σκόπιμα αναποτελεσματικής εφαρμογής
22. Ασφάλεια και Ρωμαϊκές Πρακτικές Web Εφαρμογών
- Επικύρωση εισόδου χρήστη
- Ασφαλής χειρισμός αιτήσεων HTTP
- Προσφυγή κοινών ευρωστιακών web
- Ασφαλής χειρισμός σφαλμάτων
- Έννοιες αυθεντικοποίησης και εξουσιοδότησης
- Διαχείριση μυστικών και ρυθμίσεων
- Ασφαλέα επικοινωνία HTTP
- Αποφυgence ευαίσθητων πληροφοριών στο ημερολόγιο
- Διαχείριση εξαρτήσεων και ενημερώσεις
- Όρια πόρων και χρονικά όρια αιτήσεων
- Άσκηση: Επανεξέταση και ενίσχυση της παραδείγματος API
23. Ημερολόγιο Εφαρμογής και Παρατηρήσιμότητα (Observability)
- Βασικές έννοιες ημερολογίου
- Δομημένο ημερολόγιο (Structured logging)
- Επίπεδα ημερολογίου
- Ημερολόγιο αιτήσεων
- Ημερολόγιο σφαλμάτων
- Συσχέτιση και αναγνωριστικά αιτήματος
- Παρακολούθηση συμπεριφοράς εφαρμογής
- Βασικά μετρικά
- Σημεία ελέγχου υγείας (Health-check endpoints)
- Διάγνωση παραγωγικών προβλημάτων
- Πρακτική άσκηση: Προσθήκη δομημένου ημερολογίου και ελέγχων υγείας
24. Δοχείοποίηση Εφαρμογής Go (Containerizing)
- Γιατί να χρησιμοποιείτε δοχεία (containers);
- Εφαρμογές Go και δοχείοποίηση
- Συγγραφή Dockerfile
- Πολλαπλά στάδια δημιουργίας (Multi-stage builds)
- Δημιουργία ελαφριάς εικόνας λειτουργικής
- Διαχείριση ρυθμίσεων μέσω μεταβλητών περιβάλλοντος
- Δικτύωση δοχείων
- Εκposition θυρών εφαρμογής
- Εκτέλεση εφαρμογής σε δοχείο
- Δοκιμή δοχείοποιημένης εφαρμογής
- Πρακτική άσκηση: Συσκευασία της παραδείγματος εφαρμογής Go ως έτοιμο για παραγωγή δοχείο
25. Θέσπιση (Deployment)
- Προετοιμασία εφαρμογής για παραγωγή
- Δημιουργία δυαδικών παραγωγής
- Ρύθμιση περιβάλλοντος
- Θέσπιση βασισμένη σε δοχεία
- Αρχιτεκτονική θέσπισης
- Αντιστρεπτό διαμεσολαβητή (Reverse proxies)
- Παράδειγμα HTTPS/TLS
- Έλεγχοι υγείας εφαρμογής
- Ομαλή έξοδος (Graceful shutdown)
- Χειρισμός σήματα λειτουργικού συστήματος
- Κλιμάκωση web εφαρμογών Go
- Οριζόντια έναντι κατακόρυφης κλιμάκωσης
- Βασική αποσφαλμάτωση θέσπισης
- Πρακτική άσκηση: Θέσπιση της παραδείγματος εφαρμογής web
26. Εργασία Κορυφής (Capstone): Πλήρης Web Εφαρμογή Go
Οι συμμετέχοντες ενώνουν τις έννοιες δημιουργώντας μια πλήρη εφαρμογή.
Το έργο μπορεί να περιλαμβάνει:
- Εκκίνηση έργου με Go Modules
- Οργάνωση πακέτων
- Διαδρομής HTTP
- Σημεία πρόσβασης REST API
- Χειρισμός αιτήσεων και απαντήσεων JSON
- Επικύρωση εισόδου
- Χειρισμός σφαλμάτων
- Διεπαφές
- Παράλληλη επεξεργασία
- Επικοινωνία εξωτερικής API
- Διατήρηση αρχείου ή βάσης δεδομένων
- Αυτόματες δοκιμές
- Ημερολόγιο
- Παράδειγμα απόδοσης
- Δοχείοποίηση
- Ρύθμιση παραγωγής
- Θέσπιση
27. Επανεξέταση και Καλές Πρακτικές
- Επανεξέταση βασικής σύνταξης Go
- Συνήθειες προγραμματισμού Go
- Συγγραφή ιδιωματικής Go
- Διατήρηση κώδικα απλού
- Αποτελεσματικός σχεδιασμός πακέτων
- Καλές πρακτικές χειρισμού σφαλμάτων
- Αρχές σχεδιασμού διεπαφών
- Καλές πρακτικές παράλληλης εκτέλεσης
- Στρατηγικές δοκιμών
- Παράδειγμα απόδοσης
- Συντηρησιμότητα και αναγνωσιμότητα
- Συνηθισμένα λάθη από νέους προγραμματιστές Go
- Συμβουλημένες προσεγγίσεις για συνέχεια Go ανάπτυξης
28. Συμπέρασμα
- Επανεξέταση βασικών εννοιών
- Επανεξέταση ολοκληρωμένης web εφαρμογής
- Ερωτήσεις και συζήτηση
- Αποσφαλμάτωση κοινών πραγματικών σενάρων
- Συμβουλημένες επόμενες βήματα για Go ανάπτυξη
- Επιπλέον βιβλιοθήκες Go και πόροι οικογένειας
- Συνεχείς ευκαιρίες για δημιουργία παραγωγικών υπηρεσιών Go
Απαιτήσεις
- Κατανόηση των γενικών αρχών προγραμματισμού
Κοινό σκοπός
- Προγραμματιστές
Σχόλια (5)
Ο εκπαιδευτής απέδειξε την εξειδίκευσή του στο θέμα, κάτι που δεν το λαμβάνω ποτέ ως προοπτικό. Παρέσχε πολύ χρήσιμες εισights στις βιομηχανικές προδιαγραφές.
Giuseppe
Κομμάτι - Learning Go Programming
Μηχανική Μετάφραση
Απολαύστηκα πολύ με την ποσότητα εργασιών με άμεση συμμετοχή που κάναμε. Εγώ διδασκόμαναι προσωπικά κάνοντας πράγματα, για αυτό ήταν καλό ότι ο Francesco είχε πολλές εργασίες με άμεση συμμετοχή. Δυσκόλεψα να καταλάβω μερικά από τα σύμφωνα από τις διαφάνειες, αλλά όταν πραγματικά έχω άμεση επαφή και μπορώ να υλοποιήσω κάποιες από τις βασικές λειτουργίες της γλώσσας, με βοήθησε πολύ να τα κατανοήσω καλύτερα.
Adam Fitzhugh - OpticoreIT
Κομμάτι - Learning Go Programming
Μηχανική Μετάφραση
την ρυθμία, τη δυνατότητα των εκπαιδευτών να βοηθούν και να υποστηρίζουν λίγο πιο δύσκολες ερωτήσεις.
Andrei Mihai - Viasat
Κομμάτι - Learning Go Programming
Μηχανική Μετάφραση
Η βαθιά γνώση του Radu και η προσαρμογή του ρυθμού σε μένα.
Adeel Ahmad - Coefficient Data Ltd
Κομμάτι - Learning Go Programming
Μηχανική Μετάφραση
Η ευελιξία του εκπαιδευτή. Συνέθεσε πραγματικά το μάθημα στις ειδικές ανάγκες μας.
Daniel Kurner - Daimler TSS
Κομμάτι - Learning Go Programming
Μηχανική Μετάφραση