# 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/)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://golang-microservices.rijalasepnugroho.com/readme.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
