# Go Guidance

Mempelajari pemrograman golang untuk pemula. Materi akan dibahas step by step dari basic sampai mahir. Ruang lingkup pembelajaran meliputi :

## [Basic](https://golang-microservices.rijalasepnugroho.com/golang-fundamental/basic)

* Install golang
* Hello world
* Package, type, constanta, variable, function
* Flow controll : if, else, switch, for, defer
* Array : array, slice, map

## [Psuedo OOP](https://golang-microservices.rijalasepnugroho.com/golang-fundamental/pseudo_oop)

* struct
* Method
* Interface
* Encapsulation, inheritance and polymorphism

## [Konkurensi](https://golang-microservices.rijalasepnugroho.com/golang-fundamental/konkurensi)

* Go routine
* Channel
* Channel dengan buffer
* Range dan close
* Select
* Select default
* Select timeout
* Sync Mutex
* Handling sync group routine

## Design Pattern

* Singleton
* Abstract factory
* Dependency injection
* [Concurrency pattern](https://golang-microservices.rijalasepnugroho.com/design-pattern/concurrency-pattern)
  * [Worker Pool](https://golang-microservices.rijalasepnugroho.com/design-pattern/concurrency-pattern/worker-pool)
  * [Future / Promise](https://golang-microservices.rijalasepnugroho.com/design-pattern/concurrency-pattern/future-promise)
  * [Rate Limit](https://golang-microservices.rijalasepnugroho.com/design-pattern/concurrency-pattern/rate-limit)
  * [Semaphore](https://github.com/jacky-htg/golang-essentials/blob/master/design-pattern/sempahore.md)
  * [Single Flight](https://golang-microservices.rijalasepnugroho.com/design-pattern/concurrency-pattern/single-flight)

## Build Rest API Framework

Di materi sebelumnya, kita telah membuat project melalui perintah `go mod init essentials`. Jadi dalam project pembuatan framework API ini, kita memakai 'essentials' sebagai nama project.

* [Start up](https://golang-microservices.rijalasepnugroho.com/build-rest-api-framework/start-up)
* [Shutdown](https://golang-microservices.rijalasepnugroho.com/build-rest-api-framework/shutdown)
* [Json](https://golang-microservices.rijalasepnugroho.com/build-rest-api-framework/json)
* [Database](https://golang-microservices.rijalasepnugroho.com/build-rest-api-framework/database)
* [Clean architecture](https://golang-microservices.rijalasepnugroho.com/build-rest-api-framework/clean-architecture)
* [Configuration](https://golang-microservices.rijalasepnugroho.com/build-rest-api-framework/configuration)
* [Fatal](https://golang-microservices.rijalasepnugroho.com/build-rest-api-framework/fatal)
* [Logging](https://golang-microservices.rijalasepnugroho.com/build-rest-api-framework/logging)
* [Routing](https://golang-microservices.rijalasepnugroho.com/build-rest-api-framework/routing)
* [CRUD](https://golang-microservices.rijalasepnugroho.com/build-rest-api-framework/crud)
* [Request-Response helper](https://golang-microservices.rijalasepnugroho.com/build-rest-api-framework/request-response-helper)
* [Error handler](https://golang-microservices.rijalasepnugroho.com/build-rest-api-framework/error-handler)
* [Unit testing](https://golang-microservices.rijalasepnugroho.com/build-rest-api-framework/unit-testing)
* [API testing](https://golang-microservices.rijalasepnugroho.com/build-rest-api-framework/api-testing)
* [Context](https://golang-microservices.rijalasepnugroho.com/build-rest-api-framework/context)
* [Validation](https://golang-microservices.rijalasepnugroho.com/build-rest-api-framework/validation)
* [Middleware](https://golang-microservices.rijalasepnugroho.com/build-rest-api-framework/middleware)
* [Token](https://golang-microservices.rijalasepnugroho.com/build-rest-api-framework/token)
* [RBAC](https://golang-microservices.rijalasepnugroho.com/build-rest-api-framework/rbac)

## Build gRPC API Framework

* [Protocol Buffer](https://golang-microservices.rijalasepnugroho.com/grpc-framework/grpc-protobuf)
* [makefile](https://golang-microservices.rijalasepnugroho.com/grpc-framework/makefile)
* [grpc server](https://golang-microservices.rijalasepnugroho.com/grpc-framework/grpc-server)
* [Config](https://golang-microservices.rijalasepnugroho.com/grpc-framework/grpc-config)
* [Database](https://golang-microservices.rijalasepnugroho.com/grpc-framework/grpc-database)
* [Routing](https://golang-microservices.rijalasepnugroho.com/grpc-framework/grpc-routing)
* [Clean Architecture](https://golang-microservices.rijalasepnugroho.com/grpc-framework/grpc-clean-architecture)
* [gRPC Client](https://golang-microservices.rijalasepnugroho.com/grpc-framework/grpc-client)
* [Tracing](https://golang-microservices.rijalasepnugroho.com/grpc-framework/grpc-tracing)
* [Caching](https://golang-microservices.rijalasepnugroho.com/grpc-framework/grpc-caching)
* [Testing](https://golang-microservices.rijalasepnugroho.com/grpc-framework/grpc-testing)

## Referensi Tambahan

* [Buku "The Go Programing Language"](https://www.gopl.io/)
* [Dokumentasi Resmi Golang](https://golang.org/doc/)
