© Rodrigo Paulicchi
© Rodrigo Paulicchi

Web programming with Go course

Chaos Camp 2022 - 2023

The Web programming with Go course is an intensive free of charge training suitable for students and junior professionals interested in new technologies, coding and computer science.

The main lecturer of the course is provided by our partner MNKnowledge, however senior professionals from Chaos will also be involved in the course.

Admission process, details & important dates

The admission process for the course is as follows:

  • Applications for participation in the course are to be submitted by November 30, 2022.
  • An initial screening process will identify a selection of candidates who will be invited to complete an online entry test on December 3, 2022 which will assess their knowledge in the basics of programming.
  • The 25 best candidates (based on test results) start the intensive training on December 12, 2022.
  • Lectures will be held twice a week (Mondays and Wednesdays) at 18:30 local time in Bulgarian language. Most lectures will be held online but a couple of them may be held onsite at Chaos’ office (145 Tsarigradsko shose, Sofia Office Center, Sofia) if the conditions allow it.
  • The course wraps up on February 15, 2023.
  • In order to receive a Chaos Certificate for participation in the course, participants must have a high rate of attendance, do their homework regularly, and complete the final project.

Program

  • Introduction to Go – history, why Go, main features, installing Go, environment setup, hello-go program, Go programming and debugging in VSCode and GoLand, git workflow setup, Go basic syntax. (3 h)

  • Program structure, data types, operators, control-flow statements, functions – names, declarations, variables, constants, assignments, pointers, type declarations, packages, scopes, arithmetic, relational, logical, bitwise, assignment, type conversion, and other operators, decision making, loops, functions, value and reference parameters. Homework 1 (algorithmic problem). (3 h)

  • Composite types, functions, error handling – arrays, slices, maps, ranges, structs, JSON, Text and HTML Templates, function declarations, recursion, multiple return values, errors, error handling strategies, function values, anonymous functions, closures, variadic functions, deferred function calls, panic, recover. (3 h)

  • Methods – methods, method declarations, methods with pointer receiver, composing types by struct embedding, method values and expressions, encapsulation, examples. Homework 2 (Building Github statistics JSON client). (3 h)

  • Interfaces – interfaces as contracts, interface types, interface conformance and duck typing, interface values, sorting with sort.Interface, http.Handler interface and routing with ServeMux, error Interface, type assertions, discriminating errors using type assertions, querying behaviors using interface type assertions, type switches, examples, best practices using interfaces in Go. (3 h)

  • Goroutines and Channels – goroutines, concurrent service implementation examples, channels, parallel loops, concurrent web crawling example, multiplexing with select, goroutines cancelation, concurrent directory processing example. Homework 3 (Concurrent Web Scraping). (3 h) 

  • Concurrency with Shared Variables – goroutines and threads, data races, mutual exclusion - sync.Mutex, read/write mutexes - sync.RWMutex, memory synchronization, lazy initialization - sync.Once, Go race detector, examples. Chat server example. (3 h)

  • Building network clients, servers and web services – Internet protocol stack (IP, TCP, UDP), building concurrent TCP servers and clients using net package, SOA, HTTP, Web API, REST, implementing Web APIs using Go net/http package, faster REST API implementation using frameworks: Gin, Fasthttp, Fiber. Introduction to Domain Driven Design. Building a GoBlogging Web API. Homework 4 (Proposing a Web API course project). (3 h)

  • Working with SQL databases – using database/sql (sql.DB), importing MySQL DB driver, accessing database, retrieving result sets, modifying data and using transactions, using prepared statements, handling errors, connection pooling, best practices. Object to Relational Mapping (ORM). Implementing ORM with GORM. Adding a persistence layer to GoBlogging Web API. (3 h)

  • Building web services with gRPC – SPDY, HTTP/2, QUIC (HTTP/3), modern Remote Procedure Calls (RPC) and gRPC, gRPC design principles, main use cases: microservices, real time P2P bidirectional communication, constrained environments, IoT, mobile devices, browser clients, IPC. Protocol Buffers (Protobuf) - .proto definition and compilation with protoc compiler. Simple gRPC client-server example. Data streaming with gRPC. Bidirectional streaming example. Exposing gRPC Service as REST Service using  grps-gateway. Homework 5 (Course project proof of concept prototype). (3 h)

  • Building web services with GraphQL (3 h)

  • Modules and dependency management using go mod – modules, go.mod file, version selection, semantic import versioning, installing and activating module support, defining a module, upgrading and downgrading dependencies, daily workflow. Projects mentoring. (3 h)

  • Code generation. Go 2 generics – generics and their purpose, type-specific wrappers with type-agnostic implementations, creating a generator, creating a template, running gofmt and goimports, alternatives – using interfaces, assertions, reflection, pros and cons of different approaches. Trying Go 2 generics with go2go playground. Q&A. (3 h)

  • Projects demonstration. (3 h)
Diana_Geneva_540x540.png

Diana Geneva

Software Developer Intern, Chaos Cloud team
Participant in Chaos Camp 2021 - 2022

"I am a person who learns best in an organized environment so the Go course was a great opportunity for me.

The course covers the latest Go developments as well as good programming practices overall. Since there is a homework assignment every week you are encouraged to follow along which is good for your motivation. The guest lecturers from the Chaos team were very engaging - for example, by live coding and optimizing a piece of code together with the audience. The final project was the highlight for me. Not only do you get to make a working prototype on a topic that you find interesting but you also receive practical advice on how to improve it."

Mentor

Ivan Borshukov
Ivan is a software engineer passionate about Go and software development in general. He has over 7 years of professional experience developing applications using Go, including microservice architectures and software installed on desktop machines. He's also part of the Go community in Bulgaria where he tries to grow the language popularity by organizing meetups and giving lectures at Sofia University.

Guest Lecturer

Ivan Latunov
Ivan has over 8 years of experience at Chaos working with both Go and JavaScript. He's been an assistant at the Faculty of Mathematics and Informatics (FMI) at Sofia University for the Introduction to Computer Graphics course. He has worked on various Chaos products including the licensing infrastructure and Chaos Cloud.

© 2024 Chaos Software EOOD. All Rights reserved. Chaos®, V-Ray® and Phoenix FD® are registered trademarks of Chaos Software EOOD in Bulgaria and/or other countries.