Επικοινωνήστε μαζί μας

Εξέλιξη Κομματιού

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 run
  • go build
  • go install
  • go 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

Απαιτήσεις

  • Κατανόηση των γενικών αρχών προγραμματισμού

Κοινό σκοπός

  • Προγραμματιστές
 28 Ώρες

Αριθμός συμμετέχοντων


Τιμή ανά συμμετέχοντα

Σχόλια (5)

Εφεξής Μαθήματα

Σχετικές Κατηγορίες