Overview :
Go or Golang is becoming one of the most popular high-level programming languages. The reasons for its popularity is because its simple, its fast and easy to learn. The language is not only easy to learn, but it also makes the processes of data manipulation and analysis an easy task with the help of its distinctive features. The language was made by Google in 2007 and it has taken over most of the world with companies like Cred, BookmyShow and other using it.
PREREQUISITES There are no set requirements for going through this training. However, a prior experience in programming and an understanding of basic concepts like variables/scopes, flow-control, and functions would help the participant learn in a better manner.
Course Curriculum.
Basics of Go
Introduction
- The Go Programming Language
- Why Go?
- Go vs Other Languages
Setting up the Environment
- Downloading and Installing Go
- Setting up VSCode
- The Go CLI toolkit
Getting Started
- “Hello World” program
- go build
- go run
- go install
Literals, Variables, and Data Types
- var key word
- short declaration
- literals
- Data Types in Go
- variable scope
- constants
- iota
Basic I/O
- The fmt package
- The bufio package
- The log package
Functions
- Writing a function
- return values
- parameters and arguments
- What is meant by First Class Functions
- defers
Errors
- Error Handling in Go
- defer, panic, and recover
- Wrap and Unwrap errors
- Pointers
- Basics of Pointers
- Referencing and De-referencing
- Pass by Value
- Pass by Reference
Data Structures
- Structs
- Arrays
- Slices
- Maps
- Control Statements
- If/Else
- Switch
- For
Methods
- Methods and Structs
- Receivers and Pointer Receivers
- Value vs Pointers
Interfaces
- What are interfaces?
- The empty interface
- Type inference and reflection
- Type Assertions
- Type Switches
- Well Known Interfaces
- Reflection in go
Concurrency
- Concurrency vs Parallelism
- Working with go routines
- Race Conditions
- Sync, Wait
- Mutexes
Channels
- Go routine and Communication
- Channels and Data Types
- Channel Direction
- Closing Channels
- Context Package
- Leaky Goroutines
- Cancel func
- Timeout
- Deadline
- Closing a Context
Version Control using git
- Modules and Repositories
- Tags and Releases for App versioning
- Backend Programming with Go
net/http package
- Working with http package
- Starting a simple server
- handling routes
- Using Templates for web pages
- Text templates
- HTML Templates
- Serving Static Files
- Configuring Server Configuration
Using the chi router
- using Go-Chi for routing
- URL Structure
- Representations and Resources
- Handling Requests
- Producing Response
- JSON Marshaling and Unmarshaling
- Routing
- Sub Routing
- Common Middlewares
Hands-On: Writing a CRUDL HTTP-JSON API
Basics of Docker and Containerization
- What is Docker?
- What can you use it for?
- Docker Architecture
- Docker Objects
- Hello World
- Running Prebuilt images
- Writing a Dockerfile
- Build and run an image
- Publishing Ports
- CMD vs ENTRYPOINT
- ADD vs COPY
- CLI Options
- Manage container networking
- Write a Docker Compose file
- environment variables
- secrets
- Work with volumes and bind mounts
- Share images on Docker Hub
- Manage Docker objects
- Use multi-stage builds
- Scale apps using Swarm
Containerizing the Go App
- Writing a Docker File for our API
- Figuring out the base image
- Figuring out the deployment image
- Using Multi Stage Builds
- Deploying API using a container
Basics of Cassandra
- Introduction to Apache Cassandra and NoSQL
- Setting up Cassandra Container using Docker Compose
- Configuring Cassandra
- Architecture of Cassandra
- Data Modelling in Cassandra
- Keyspaces
- Cassandra Query Language (CQL)
- DDL Commands
- Data Types
- CRUD Operations
- cli tools
- Cassandra and Go
- Go library for Cassandra: GoCQL
- Connecting to the Database
- Understanding initialization and closing connection
- Writing Crud operations
Swapping inmem datastore of the example app with Cassandra
- Introduction to JavaScript
- Introduction to JavaScript
- History of JavaScript
- Uses of JavaScript
- JavaScript/ECMAScript Versions and features
- Setting up the Environment
- Installing NodeJS
- Getting Comfortable with the IDE
- Hello World Program
Basics
- Basic Output
- Variables
- Data Types
- Type Conversions
- String Methods
- Arrays and Objects
- Working with Date and Time
- Expressions and Operations
Flow Control
- If Statements
- Switches
- Loops
- Functions
- Scope
- Error Handling
JavaScript Classes and Objects
- Basics of Objects
- Nested Objects
- Properties and Methods
- Cloning and Object
- Value vs Reference
- Creating a Class
- Constructor Method
- Working with JSON
Modern JavaScript and Asynchronous Programming
- Arrow Functions
- CallBack Functions
- Promises
- Async/Await
Basics of React
- 1. Setting up React
- 2. Hello World
- 3. Introducing JSX
- 4. Rendering Elements
- 5. Components and Props
- 6. State and Lifecycle
- 7. Handling Events
- 8. Conditional Rendering
- 9. Lists and Keys
- 10. Forms
- 11. Lifting State Up
- 12. Composition vs Inheritance
- 13. Thinking In React
- Using React to Create Front end for our API
Event Sourcing using Kafka
- Introduction to Apache Kafka
- Setting up Kafka using Docker Compose
- Introduction to Message Queues and Pub/Sub
- Setting up Apache Kafka
- Fundamentals of Apache Kafka
- Basic Operations
- Working with Producers and Consumers
- Implementing Message Queue
- Implementing Pub/Sub
- Kafka and Go
- Connecting to a Kafka Broker
- Subscribing to a Kafka Topic
- Pushing Messages to a Kafka Topic
Basics of Redis
- Introduction to Redis
- Why Redis
- Setting up Redis using Docker Compose
- Redis as a key value store
- DDL operations
- Redis Data Types
- CRUD operations
Go and Redis
- Connecting to a Redis Database
- Performing CRUD Operations
- Utilizing Redis as a Cache
Basics of Elastic Search
- Introduction to Elastic Stack
- Setting up Elastic Stack
- Configuring Elastic Search
- Pushing Metrics to Elastic Search
- Searching and Analysing using Kibana
- Storing, Searching, and Analysing using Elastic Search API