Course Outline
1. Introduction to Go
- Overview of Go (Golang)
- Historical background and design philosophy
- Go in web and systems programming contexts
- Core attributes:
- Static typing
- Emphasis on simplicity and clarity
- Rapid compilation
- Natively supported concurrency
- Automated memory management via garbage collection
- Cross-platform build capabilities
- Typical application scenarios for Go
- Strengths and limitations of the language
- Comparison with C/C++, JavaScript, Ruby, Python, and Java
- Navigating the Go ecosystem
- Fundamentals of the Go standard library
- Module system and dependency control
- Anatomical structure of a Go application
- Practical session: Run and inspect a basic Go program
2. Configuring the Go Development Environment
- Go installation process
- Components of the Go toolchain
- Setting environment variables
- Selecting an IDE or text editor
- Command-line usage in Go
- Initializing a Go workspace
- Understanding project layout
- Project setup using Go Modules
- Running
go mod init - Adding dependencies using
go get - Managing and updating library versions
- Code formatting via
gofmt - Executing scripts with
go run - Compiling applications using
go build - Installing Go binaries
- Cross-compilation techniques
- Practical session: Set up a Go project within a containerized environment
3. Variables, Constants, and Data Types
- Variable declaration methods
- Explicit vs. inferred types
- Short variable syntax
- Constants
- Default (zero) values
- Scope and duration of variable lifetimes
- Basic data types:
- Integers
- Floating-point values
- Complex numbers
- Boolean flags
- String types
- Type conversion techniques
- Unicode and UTF-8 handling
- Differences between runes and bytes
- Simultaneous variable assignment
- Concepts of type safety
- Exercise: Develop a small command-line data processing utility
4. Operators and Expressions
- Arithmetic operations
- Comparison logic
- Logical operators
- Assignment operations
- Increment and decrement operators
- Operator precedence rules
- Integer and floating-point arithmetic
- Mitigating type-conversion pitfalls
- Exercise: Write code for calculation and validation logic
5. Date, Time, and Formatting
- Utilizing the
timepackage - Date creation and manipulation
- Retrieving the current timestamp
- Time zones and geographic locations
- Parsing date and time strings
- Formatting dates and times for output
- Calculating time intervals
- Working with Unix timestamps
- Implementing timeouts
- Exercise: Integrate timestamps and duration logic into an application
6. Arrays, Slices, Maps, and Structs
Arrays
- Array declaration
- Array initialization
- Iterating through arrays
- Multi-dimensional arrays
Slices
- Distinction between slices and arrays
- Slice creation
- Adding elements to slices
- Copying slice data
- Understanding slice length and capacity
- Re-slicing operations
- Common issues with slice usage
Maps
- Creating map structures
- Inserting and deleting entries
- Key existence checks
- Iterating over map values
- Maps with complex data types
Structs
-
Defining struct types
-
Struct field properties
-
Initializing struct instances
-
Nested struct compositions
-
Anonymous struct definitions
-
Associating methods with structs
-
Applying JSON tags to structs
-
Practical session: Model users, products, and data using structs, slices, and maps
7. Conditional Logic and Loops
ifconstructselseandelse ifblocks- Declaring variables within conditional checks
forloops- Infinite loop patterns
- Loop condition management
- Control flow with
breakandcontinue - Iteration using
range - Nested loop structures
switchstatements- Expression-based switch logic
- Handling multiple cases
- Default case behavior
- Type-based switches
- Exercise: Implement validation and processing logic for an application
8. Functions
- Function definition syntax
- Parameter handling
- Return values
- Multiple return values
- Named return parameters
- Variadic functions
- Anonymous (closures) functions
- Functions as first-class values
- Closure concepts
- Recursive functions
- Passing functions as arguments
- Functions that return errors
- Designing modular, reusable functions
- Exercise: Refactor existing code into reusable functional components
9. Pointers and Memory Management
- Concept of pointers
- Address-of and dereference operators
- Pointers in function parameters
- Pointer receivers
- Pointers referencing structs
- Nil pointer handling
- Scenarios for pointer usage
- Value semantics vs. reference semantics
- Go memory management and garbage collection
- Common pointer-related errors
- Practical session: Manipulate application data using pointers
10. Developing a Web Application with Go
- Go’s capabilities in web development
- Introduction to the
net/httppackage - Setting up an HTTP server
- Handling HTTP requests and responses
- HTTP method types
- Managing request URLs and query parameters
- HTTP header management
- Understanding status codes
- Routing fundamentals
- Creating request handlers
- Processing form data
- Serving static assets
- Working with HTML templates
- Template variables and control flow
- Structuring web applications
- Practical session: Build a basic Go web server
11. Creating a RESTful Web Service
- REST architecture principles
- API endpoint design
- Handling GET, POST, PUT, PATCH, and DELETE requests
- Working with JSON data
- JSON encoding and decoding
- Request validation techniques
- Status code management
- Structuring error responses
- Managing query and path parameters
- Defining API response schemas
- Decoupling handlers from business logic
- Practical session: Implement a CRUD REST API
12. Go Runtime, Compilation, and Builds
- How the Go compiler works
- The Go build pipeline
- Using
go run - Using
go build - Using
go install - Using
go test - Compiler build flags
- Environment-specific build configurations
- Targeting different OS architectures
- Generating standalone binaries
- Managing application settings
- Exercise: Compile the application for multiple platforms
13. File Handling and Web Integration
- Opening and closing file resources
- Reading file contents
- Writing to files
- Directory creation
- Accessing file metadata
- Buffered Input/Output operations
- Stream processing
- Reading and writing JSON files
- HTTP client implementation
- Initiating outbound HTTP requests
- Handling client-side errors
- Timeout and cancellation management
- Processing API responses
- Practical session: Fetch data from an external API and store it locally
14. Error Handling and Debugging
- Go’s error handling paradigm
- Returning errors from functions
- Checking error status
- Creating custom error types
- Error wrapping techniques
- Adding context to error messages
- Using
errors.Isanderrors.As - Panic and recovery mechanisms
- Appropriate use of
panic - Debugging typical Go issues
- Logging application events
- Utilizing Go debugging tools
- Exercise: Identify and fix intentionally introduced errors
15. Interfaces and Abstraction
- Definition of interfaces
- Implicit interface satisfaction
- Defining interface contracts
- Interface values
- Empty interfaces and the
anytype - Type assertion techniques
- Type switch statements
- Implementing interfaces with pointers vs. values
- Designing focused, small interfaces
- Dependency inversion principles
- Leveraging interfaces for testing
- Reducing code coupling
- Practical session: Integrate interfaces into the sample web app
16. Packages and Project Structure
- Creating new packages
- Naming conventions for packages
- Exported vs. unexported identifiers
- Importing external packages
- Package initialization order
- Organizing application layers
- Internal package usage
- Dependency management via Go Modules
- Semantic versioning standards
- Incorporating third-party libraries
- Preventing circular dependencies
- Designing maintainable Go projects
- Exercise: Refactor the application into distinct packages
17. Concurrency with Goroutines
- Concepts of concurrency
- Introduction to Goroutines
- Starting new goroutines
- Lightweight concurrent execution model
- Synchronization challenges
- Managing shared state
- Race condition prevention
- Using
sync.WaitGroup - Mutexes and read/write locks
- Atomic operations
- Practical session: Refactor sequential tasks into concurrent workflows
18. Channels
- Understanding channel mechanics
- Sending and receiving values
- Buffered vs. unbuffered channels
- Blocking behavior analysis
- Closing channels
- Range operations on channels
- Directional channel types
- Channel-based communication patterns
- Select statement usage
- Implementing timeouts and cancellation
- Worker-pool patterns
- Producer/consumer patterns
- Practical session: Construct a concurrent worker system
19. Context and Request Management
- Importance of context in web apps
- Working with
context.Context - Request-scoped contexts
- Cancellation mechanisms
- Setting deadlines
- Implementing timeouts
- Propagating context across layers
- Cancelling database or HTTP operations
- Avoiding common context misuse
- Exercise: Add request cancellation and timeouts to the web app
20. Testing Go Applications
- The importance of automated testing
- Writing unit tests
- Using the
testingpackage - Defining test functions
- Test naming standards
- Table-driven testing methods
- Testing error paths
- Testing HTTP handlers
- Using HTTP test servers
- Test fixture management
- Measuring test coverage
- Performance benchmarks
- Writing example tests
- Testing interfaces with mocks or fakes
- Practical session: Develop a test suite for the sample application
21. Performance Optimization
- Analyzing Go application performance
- Identifying performance bottlenecks
- CPU vs. memory usage
- Choosing efficient data structures
- Minimizing unnecessary allocations
- Working with strings, bytes, and buffers
- Goroutine lifecycle management
- Avoiding over-concurrency
- Implementing caching strategies
- Database and network performance considerations
- Application profiling
- Running benchmarks and performance tests
- Leveraging Go profiling tools
- Exercise: Profile and optimize a deliberately inefficient application
22. Security and Robust Web Application Practices
- User input validation
- Safe HTTP request handling
- Mitigating common web vulnerabilities
- Secure error handling strategies
- Authentication and authorization concepts
- Managing secrets and configuration
- Secure HTTP communication (TLS)
- Preventing sensitive data leakage in logs
- Dependency management and updates
- Setting resource limits and timeouts
- Exercise: Review and secure the sample API
23. Application Logging and Observability
- Logging basics
- Structured logging implementation
- Log level management
- Request-specific logging
- Error logging strategies
- Correlation and request IDs
- Monitoring application behavior
- Collecting basic metrics
- Implementing health-check endpoints
- Diagnosing production issues
- Practical session: Add structured logging and health checks
24. Containerizing the Go Application
- Benefits of containerization
- Go applications in container environments
- Creating a Dockerfile
- Multi-stage builds
- Building minimal runtime images
- Configuration via environment variables
- Container networking concepts
- Exposing application ports
- Running applications in containers
- Testing containerized applications
- Practical session: Package the sample Go app as a production-ready container
25. Deployment
- Preparation for production release
- Building production binaries
- Environment configuration management
- Container-based deployment strategies
- Deployment architecture design
- Using reverse proxies
- HTTPS/TLS implementation
- Application health monitoring
- Graceful shutdown procedures
- Handling OS signals
- Scaling Go web applications
- Horizontal vs. vertical scaling
- Basic deployment troubleshooting
- Practical session: Deploy the sample web application
26. Capstone: Complete Go Web Application
Participants integrate all concepts to build a complete application.
The project may encompass:
- Project setup with Go Modules
- Package organization
- HTTP routing implementation
- REST API endpoint creation
- JSON request/response handling
- Input validation
- Error handling mechanisms
- Interface implementation
- Concurrent processing logic
- External API integration
- File or database persistence
- Automated testing
- Logging configuration
- Performance optimization
- Containerization
- Production configuration
- Deployment setup
27. Review and Best Practices
- Recap of core Go syntax
- Go coding standards
- Writing idiomatic Go code
- Emphasizing code simplicity
- Effective package design
- Error-handling best practices
- Interface design principles
- Concurrency best practices
- Testing strategies
- Performance considerations
- Maintainability and readability
- Common pitfalls for new Go developers
- Recommended paths for continued Go development
28. Conclusion
- Summary of key concepts
- Review of the completed web application
- Q&A and discussion
- Troubleshooting common real-world scenarios
- Suggested next steps for Go development
- Additional Go libraries and ecosystem resources
- Opportunities for building production-grade Go services
Requirements
- Familiarity with general programming concepts
Audience
- Developers
Testimonials (5)
The trainer proved himself to be an expert of the topic, which I never give for granted. He provided very useful insight on industry standards.
Giuseppe
Course - Learning Go Programming
I enjoyed the amount of hands on exercises we did. I personally learn by doing things so it was good that Francesco had lots of hands-on exercises to do. I struggled to pick up a few of the concepts from the slides but when I actually got hands on and was able to implement some of the key features of the language it helped me understand it better.
Adam Fitzhugh - OpticoreIT
Course - Learning Go Programming
tha pace, trainers ability to help and sustain slightly more difficult questions.
Andrei Mihai - Viasat
Course - Learning Go Programming
Radu's in-depth knowledge, and tailoring the pace for me.
Adeel Ahmad - Coefficient Data Ltd
Course - Learning Go Programming
Flexibility of the trainer. Really catered the course to our specific needs.