# KodeKloud: Beta Courses Advanced Golang

## Advanced Golang

### Introduction

- [Course Introduction](https://notes.kodekloud.com/docs/Advanced-Golang/Introduction/Course-Introduction/page.md): This course simplifies advanced Golang concepts using engaging illustrations and interactive labs for practical experience.

### Modules, Packages and Imports

- [Repositories Modules and Packages](https://notes.kodekloud.com/docs/Advanced-Golang/Modules-Packages-and-Imports/Repositories-Modules-and-Packages/page.md): This lesson explores library management in Golang, focusing on organizing code into repositories, modules, and packages for efficient code management and dependency tracking.
- [Creating and accessing a package](https://notes.kodekloud.com/docs/Advanced-Golang/Modules-Packages-and-Imports/Creating-and-accessing-a-package/page.md): Learn to create a Go module with packages for encryption and decryption, implementing a simple ASCII shifting encryption function.
- [Imports and exports](https://notes.kodekloud.com/docs/Advanced-Golang/Modules-Packages-and-Imports/Imports-and-exports/page.md): This article explains imports and exports in Go, including how to structure packages and access exported identifiers.
- [Golang commands](https://notes.kodekloud.com/docs/Advanced-Golang/Modules-Packages-and-Imports/Golang-commands/page.md): This article explores commonly used Go commands and demonstrates their integration into the development workflow.
- [Compiling and installing the application](https://notes.kodekloud.com/docs/Advanced-Golang/Modules-Packages-and-Imports/Compiling-and-installing-the-application/page.md): Learn to compile, install, and run your Go application with step-by-step instructions for building code and configuring your environment.
- [Developing and Publishing modules workflow](https://notes.kodekloud.com/docs/Advanced-Golang/Modules-Packages-and-Imports/Developing-and-Publishing-modules-workflow/page.md): This article explores key considerations for developing and publishing a Go module, detailing essential steps for creating a robust and discoverable module.
- [Module version numbering](https://notes.kodekloud.com/docs/Advanced-Golang/Modules-Packages-and-Imports/Module-version-numbering/page.md): This article explores module version numbering, highlighting its importance for stability and backward compatibility in module development and usage.
- [Publishing a module](https://notes.kodekloud.com/docs/Advanced-Golang/Modules-Packages-and-Imports/Publishing-a-module/page.md): Learn to publish your Go module on GitHub by initializing a repository, committing changes, tagging releases, and updating your module for public use.
- [Package comments and godoc](https://notes.kodekloud.com/docs/Advanced-Golang/Modules-Packages-and-Imports/Package-comments-and-godoc/page.md): This article explains how to use comments and the Godoc tool in Golang for effective documentation of code.
- [Package name collision](https://notes.kodekloud.com/docs/Advanced-Golang/Modules-Packages-and-Imports/Package-name-collision/page.md): This article explains how to resolve package name collisions in Go by aliasing one of the conflicting packages.
- [Naming packages](https://notes.kodekloud.com/docs/Advanced-Golang/Modules-Packages-and-Imports/Naming-packages/page.md): This article explores best practices for naming Go packages to enhance code readability and maintainability.

### Core packages

- [Core Packages Intro](https://notes.kodekloud.com/docs/Advanced-Golang/Core-packages/Core-Packages-Intro/page.md): This lesson introduces core packages in Go, explaining their organization, functionality, and the difference between built-in and third-party packages.
- [Strings](https://notes.kodekloud.com/docs/Advanced-Golang/Core-packages/Strings/page.md): This article explores strings in Go, focusing on methods like Contains, ReplaceAll, and Count for effective text handling.
- [InputOutput](https://notes.kodekloud.com/docs/Advanced-Golang/Core-packages/InputOutput/page.md): This article provides a comprehensive guide on Gos I/O library, focusing on Reader and Writer interfaces with practical examples for various data operations.
- [File Handling](https://notes.kodekloud.com/docs/Advanced-Golang/Core-packages/File-Handling/page.md): This article explores file handling in Golang, covering libraries, path construction, metadata retrieval, and reading and writing files.
- [Errors](https://notes.kodekloud.com/docs/Advanced-Golang/Core-packages/Errors/page.md): This article explores error handling in Go programming, focusing on mechanisms like New() and Errorf() for building robust applications.
- [Logging](https://notes.kodekloud.com/docs/Advanced-Golang/Core-packages/Logging/page.md): This article reviews Golangs built-in logging package and explores the Logrus framework for implementing robust logging solutions.
- [Sort](https://notes.kodekloud.com/docs/Advanced-Golang/Core-packages/Sort/page.md): This article explores Go’s built-in sort package for sorting built-in and user-defined types, with examples for integer and string slices.
- [Hashes and cryptography](https://notes.kodekloud.com/docs/Advanced-Golang/Core-packages/Hashes-and-cryptography/page.md): This article explores Gos crypto package for integrating hashing and encryption techniques to secure digital data from unauthorized access.
- [Testing](https://notes.kodekloud.com/docs/Advanced-Golang/Core-packages/Testing/page.md): This article explains how to write unit tests in Go, covering best practices, test structure, and testing functions from different packages.

### API Development Project

- [Web Server and API](https://notes.kodekloud.com/docs/Advanced-Golang/API-Development-Project/Web-Server-and-API/page.md): This article explains the roles of web servers and APIs in modern web applications, including their functionalities and the request-response model.
- [Creating an API server](https://notes.kodekloud.com/docs/Advanced-Golang/API-Development-Project/Creating-an-API-server/page.md): This guide explains how to build a RESTful API server using Go, covering project setup, HTTP package exploration, handler registration, and server initialization.
- [HTTP verbs](https://notes.kodekloud.com/docs/Advanced-Golang/API-Development-Project/HTTP-verbs/page.md): This guide explains how to build a RESTful API supporting GET, POST, PUT, and DELETE operations for complete CRUD functionality.
- [REST Architecture](https://notes.kodekloud.com/docs/Advanced-Golang/API-Development-Project/REST-Architecture/page.md): This article explores REST architecture, its core principles, and how it facilitates the design of scalable and maintainable APIs.
- [Project Explanation](https://notes.kodekloud.com/docs/Advanced-Golang/API-Development-Project/Project-Explanation/page.md): This article explains developing an API server to manage product information using a database with five RESTful API endpoints.
- [Mux Router](https://notes.kodekloud.com/docs/Advanced-Golang/API-Development-Project/Mux-Router/page.md): Learn to create a simple RESTful API in Go, enhancing routing with the Gorilla Mux router for elegant handling and dynamic variable extraction.
- [MySQL Package](https://notes.kodekloud.com/docs/Advanced-Golang/API-Development-Project/MySQL-Package/page.md): Learn to integrate a MySQL database into your Go project using the SQL package for common database operations.
- [Demo Project Setup](https://notes.kodekloud.com/docs/Advanced-Golang/API-Development-Project/Demo-Project-Setup/page.md): This article guides the creation of a Golang application that connects to a MySQL database, covering setup, data insertion, and HTTP routing.
- [Demo 1 Get method](https://notes.kodekloud.com/docs/Advanced-Golang/API-Development-Project/Demo-1-Get-method/page.md): This article explains how to implement a GET method for a Products API, including response handling, database querying, and testing with Postman.
- [Demo 2 Get method](https://notes.kodekloud.com/docs/Advanced-Golang/API-Development-Project/Demo-2-Get-method/page.md): Implementing a Go HTTP GET endpoint to fetch all products and a single product by ID using database/sql and gorilla/mux with proper error handling and parameterized queries
- [Demo Post method](https://notes.kodekloud.com/docs/Advanced-Golang/API-Development-Project/Demo-Post-method/page.md): This lesson demonstrates creating a route for handling POST requests to insert new products into a database.
- [Demo Put method](https://notes.kodekloud.com/docs/Advanced-Golang/API-Development-Project/Demo-Put-method/page.md): This article explains how to implement a PUT endpoint for updating products in a web application.
- [Demo Delete method](https://notes.kodekloud.com/docs/Advanced-Golang/API-Development-Project/Demo-Delete-method/page.md): This guide explains how to implement a DELETE endpoint in an inventory API to complete CRUD operations.
- [Testing API](https://notes.kodekloud.com/docs/Advanced-Golang/API-Development-Project/Testing-API/page.md): This article demonstrates writing test cases for API endpoints and improving application code for better flexibility and testability.
- [Test Get Product](https://notes.kodekloud.com/docs/Advanced-Golang/API-Development-Project/Test-Get-Product/page.md): This article covers building and testing a RESTful API endpoint for retrieving a product from a database.
- [Test Post Product](https://notes.kodekloud.com/docs/Advanced-Golang/API-Development-Project/Test-Post-Product/page.md): This article demonstrates how to test the POST API endpoint for creating a new product, covering helper functions, request construction, and response verification.
- [Test Delete Product](https://notes.kodekloud.com/docs/Advanced-Golang/API-Development-Project/Test-Delete-Product/page.md): This article demonstrates testing the DELETE API for product inventory, including adding, retrieving, and deleting a product while verifying status codes.
- [Test Update Product](https://notes.kodekloud.com/docs/Advanced-Golang/API-Development-Project/Test-Update-Product/page.md): This article demonstrates how to test product API endpoints using various HTTP methods for create, update, and delete operations.

### CI/CD pipeline

- [CICD pipeline for Go app with Github actions and docker](https://notes.kodekloud.com/docs/Advanced-Golang/CICD-pipeline/CICD-pipeline-for-Go-app-with-Github-actions-and-docker/page.md): This guide demonstrates publishing an API module and establishing a CI/CD pipeline for a Go application using GitHub Actions and Docker.

### Concurrency

- [Sequential vs Concurrent Processing](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/Sequential-vs-Concurrent-Processing/page.md): This article explores the key differences between sequential and concurrent programming, essential for understanding concurrency in Golang and modern programming languages.
- [Go routines](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/Go-routines/page.md): This article explores goroutines, lightweight threads in Go's concurrency model, enabling efficient concurrent execution of functions.
- [Sequential program](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/Sequential-program/page.md): This guide demonstrates implementing a sequential program in Go to calculate squares of numbers from 1 to 10,000 while illustrating basic programming concepts.
- [Go routines program](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/Go-routines-program/page.md): Learn to execute functions concurrently in Go using goroutines by prefixing function calls with the go keyword.
- [Main Go routine](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/Main-Go-routine/page.md): This article explores the main goroutine in Go, its behavior, and how additional goroutines are spawned and managed concurrently.
- [Anonymous Go routine](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/Anonymous-Go-routine/page.md): This article explains how to use anonymous functions as Goroutines in Go for concurrent task execution.
- [Go runtime scheduler](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/Go-runtime-scheduler/page.md): This article explores the Go Runtime Scheduler, focusing on Goroutine management, scheduling strategies, and the differences between Goroutines and traditional threads.
- [WaitGroups](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/WaitGroups/page.md): This article explores WaitGroups in Go for managing concurrency and synchronizing multiple goroutines effectively.
- [WaitGroup Examples](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/WaitGroup-Examples/page.md): This article explores using WaitGroups in Go to synchronize Goroutines for concurrent programming.
- [Channels Introduction](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/Channels-Introduction/page.md): This article introduces channels in Go, explaining their role in enabling communication between goroutines for simplified concurrent programming.
- [Channels Reading and Writing](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/Channels-Reading-and-Writing/page.md): Learn to use channels in Go for communication between goroutines, including creation, data transmission, and blocking behavior. Ideal for concurrent programming.
- [Buffered Channels](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/Buffered-Channels/page.md): This lesson explores buffered channels in Go for managing concurrent data flow and their behavior compared to unbuffered channels.
- [Channels Closing a channel](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/Channels-Closing-a-channel/page.md): Learn how to properly close a channel in Go and understand the behavior of channels upon closure.
- [Panic Situations](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/Panic-Situations/page.md): This article explores panic situations in Go related to channels, including sending to a closed channel and closing an already closed channel.
- [Channels for range](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/Channels-for-range/page.md): Learn to use a for-range loop in Go for iterating over channels and arrays while preventing deadlocks by closing channels properly.
- [Select Statement](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/Select-Statement/page.md): This article explores the Select Statement in Golang for managing channel operations and concurrency in Goroutines.
- [Concurrency practices Cleaning up Go routines](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/Concurrency-practices-Cleaning-up-Go-routines/page.md): This article explores best practices for managing concurrency in Golang, focusing on cleaning up goroutines to prevent resource leaks.
- [Concurrency practices Spawning Go routine closures in a loop](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/Concurrency-practices-Spawning-Go-routine-closures-in-a-loop/page.md): This article explores spawning goroutines in Go within a loop, highlighting closure variable capture and techniques to ensure correct goroutine behavior.
- [Concurrency Practices Buffered and Unbuffered Channels](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/Concurrency-Practices-Buffered-and-Unbuffered-Channels/page.md): Understanding the difference between buffered and unbuffered channels in Golang as a fundamental concurrency practice.
- [Concurrency practices Time out code](https://notes.kodekloud.com/docs/Advanced-Golang/Concurrency/Concurrency-practices-Time-out-code/page.md): This tutorial explores implementing timeouts in Golang using the time.After function for responsive applications.
