# Go Guidance

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

## [Basic](https://go-docs.waresix.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://go-docs.waresix.com/golang-fundamental/pseudo_oop)

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

## [Konkurensi](https://go-docs.waresix.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

## 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://go-docs.waresix.com/build-rest-api-framework/start-up)
* [Shutdown](https://go-docs.waresix.com/build-rest-api-framework/shutdown)
* [Json](https://go-docs.waresix.com/build-rest-api-framework/json)
* [Database](https://go-docs.waresix.com/build-rest-api-framework/database)
* [Clean architecture](https://go-docs.waresix.com/build-rest-api-framework/clean-architecture)
* [Configuration](https://go-docs.waresix.com/build-rest-api-framework/configuration)
* [Fatal](https://go-docs.waresix.com/build-rest-api-framework/fatal)
* [Logging](https://go-docs.waresix.com/build-rest-api-framework/logging)
* [Routing](https://go-docs.waresix.com/build-rest-api-framework/routing)
* [CRUD](https://go-docs.waresix.com/build-rest-api-framework/crud)
* [Request-Response helper](https://go-docs.waresix.com/build-rest-api-framework/request-response-helper)
* [Error handler](https://go-docs.waresix.com/build-rest-api-framework/error-handler)
* [Unit testing](https://go-docs.waresix.com/build-rest-api-framework/unit-testing)
* [API testing](https://go-docs.waresix.com/build-rest-api-framework/api-testing)
* [Context](https://go-docs.waresix.com/build-rest-api-framework/context)
* [Validation](https://go-docs.waresix.com/build-rest-api-framework/validation)
* [Middleware](https://go-docs.waresix.com/build-rest-api-framework/middleware)
* [Token](https://go-docs.waresix.com/build-rest-api-framework/token)
* [RBAC](https://go-docs.waresix.com/build-rest-api-framework/rbac)

## Build gRPC API Framework

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