diff --git a/content/A-array.md b/content/A-array.md index 2d4e75f32..cfb047bb9 100644 --- a/content/A-array.md +++ b/content/A-array.md @@ -199,7 +199,7 @@ Parameter pertama keyword `make` diisi dengan tipe data elemen array yang diingi ---
diff --git a/content/A-buffered-channel.md b/content/A-buffered-channel.md index b5e16bf82..11f3f026c 100644 --- a/content/A-buffered-channel.md +++ b/content/A-buffered-channel.md @@ -68,7 +68,7 @@ Lebih detailnya mengenai fungsi `time.Sleep()` dan `time.Second` dibahas pada ch --- + diff --git a/content/A-channel-range-close.md b/content/A-channel-range-close.md index 9ce0ee6a7..3bd29d9f0 100644 --- a/content/A-channel-range-close.md +++ b/content/A-channel-range-close.md @@ -73,7 +73,7 @@ Dan sebaliknya pada fungsi `printMessage(ch <-chan string)`, channel `ch` hanya --- + diff --git a/content/A-channel-select.md b/content/A-channel-select.md index 07b9603bd..bd779f787 100644 --- a/content/A-channel-select.md +++ b/content/A-channel-select.md @@ -81,7 +81,7 @@ Cukup mudah bukan? --- + diff --git a/content/A-channel-timeout.md b/content/A-channel-timeout.md index a76d38bae..59d151d3a 100644 --- a/content/A-channel-timeout.md +++ b/content/A-channel-timeout.md @@ -68,7 +68,7 @@ Muncul output setiap kali ada penerimaan data dengan delay waktu acak. Ketika da --- + diff --git a/content/A-channel.md b/content/A-channel.md index 583ada27a..c7cedee60 100644 --- a/content/A-channel.md +++ b/content/A-channel.md @@ -164,7 +164,7 @@ fmt.Println(message) --- + diff --git a/content/A-client-http-request-simple.md b/content/A-client-http-request-simple.md index 91b737d3f..89c6d64cf 100644 --- a/content/A-client-http-request-simple.md +++ b/content/A-client-http-request-simple.md @@ -173,7 +173,7 @@ Sampai sini kita telah belajar bagaimana cara membuat http request sederhana unt --- + diff --git a/content/A-command-line-args-flag.md b/content/A-command-line-args-flag.md index d79470285..e93a3f24f 100644 --- a/content/A-command-line-args-flag.md +++ b/content/A-command-line-args-flag.md @@ -130,7 +130,7 @@ Kegunaan dari parameter terakhir method-method flag adalah untuk memunculkan hin --- + diff --git a/content/A-concurrency-pipeline.md b/content/A-concurrency-pipeline.md index d842a7649..7d09766b1 100644 --- a/content/A-concurrency-pipeline.md +++ b/content/A-concurrency-pipeline.md @@ -8,7 +8,7 @@ Go memiliki beberapa API untuk keperluan konkurensi, dua diantaranya adalah *gor Definisi *pipeline* yang paling mudah versi penulis adalah **beberapa/banyak proses yang berjalan secara konkuren yang masing-masing proses merupakan bagian dari serangkaian tahapan proses yang berhubungan satu sama lain**. -Analoginya seperti ini: bayangkan sebuah flow proses untuk auto backup database secara rutin, yang di mana database server yang perlu di-backup ada banyak. Untuk backup-nya sendiri kita menggunakan program Go, bukan *shell script*. Mungkin secara garis besar serangkaian tahapan proses yang akan dijalankan adalah berikut: +Analoginya seperti ini: bayangkan sebuah flow proses untuk auto backup database secara rutin, yang mana database server yang perlu di-backup ada banyak. Untuk backup-nya sendiri kita menggunakan program Go, bukan *shell script*. Mungkin secara garis besar serangkaian tahapan proses yang akan dijalankan adalah berikut: 1. Kita perlu data *list* dari semua database yang harus di-backup, beserta alamat akses dan kredensial-nya. 2. Kita jalankan proses backup, bisa secara sekuensial (setelah `db1` selesai, lanjut `db2`, lanjut `db3`, dst), atau secara paralel (proses backup `db1`, `db2`, `db3`, dan lainnya dijalankan secara bersamaan). @@ -383,12 +383,12 @@ Fungsi `getSum()` menerima channel dan akan secara aktif memantau dan membaca da Nah, karena di sini kita punya 3 worker yang jelasnya menghasilkan 3 buah channel baru, kita perlu sebuah mekanisme untuk menggabung channel tersebut, agar nanti mudah untuk dikontrol ([SSoT](https://en.wikipedia.org/wiki/Single_source_of_truth)). Di sinilah peran fungsi `mergeChanFileInfo()`. -Fungsi `mergeChanFileInfo()` digunakan untuk *multiplexing* atau menggabung banyak channel ke satu channel saja, yang di mana channel ini juga akan **otomatis di-close ketika channel input (`chanFileContent`) adalah *closed***. Fungsi jenis seperti ini biasa disebut dengan **Fan-in function**. +Fungsi `mergeChanFileInfo()` digunakan untuk *multiplexing* atau menggabung banyak channel ke satu channel saja, yang mana channel ini juga akan **otomatis di-close ketika channel input (`chanFileContent`) adalah *closed***. Fungsi jenis seperti ini biasa disebut dengan **Fan-in function**. Jadi TL;DR nya: * Fungsi Fan-out digunakan untuk pembuatan worker, untuk distribusi job, yang proses distribusinya sendiri akan berhenti ketika channel inputan di-close. -* Fungsi Fan-in digunakan untuk *multiplexing* atau menggabung banyak worker ke satu channel saja, yang di mana channel baru ini juga otomatis di-close ketika channel input adalah closed. +* Fungsi Fan-in digunakan untuk *multiplexing* atau menggabung banyak worker ke satu channel saja, yang mana channel baru ini juga otomatis di-close ketika channel input adalah closed. Sekarang lanjut buat fungsi `getSum()`. @@ -408,7 +408,7 @@ func getSum(chanIn <-chan FileInfo) <-chan FileInfo { } ``` -Bisa dilihat, di situ channel inputan `chanIn` di-listen dan setiap ada penerimaan data (via channel tersebut) dilanjut ke proses kalkulasi md5 hash. Hasil hash-nya di tambahkan ke data `FileInfo` kemudian dikirim lagi ke channel `chanOut` yang di mana channel ini merupakan nilai balik fungsi `getSum()`. +Bisa dilihat, di situ channel inputan `chanIn` di-listen dan setiap ada penerimaan data (via channel tersebut) dilanjut ke proses kalkulasi md5 hash. Hasil hash-nya di tambahkan ke data `FileInfo` kemudian dikirim lagi ke channel `chanOut` yang mana channel ini merupakan nilai balik fungsi `getSum()`. Ketika `chanIn` closed, maka bisa diasumsikan semua data sudah dikirim. Jika memang iya dan data-data tersebut sudah di proses (pencarian md5hash-nya), maka channel `chanOut` juga di-close. @@ -539,7 +539,7 @@ Ok sekian untuk chapter panjang ini. --- + diff --git a/content/A-data-type-conversion.md b/content/A-data-type-conversion.md index 135d4f3ba..d46d8af97 100644 --- a/content/A-data-type-conversion.md +++ b/content/A-data-type-conversion.md @@ -247,7 +247,7 @@ Kombinasi `switch` - `case` bisa dimanfaatkan untuk deteksi tipe konkret data ya --- + diff --git a/content/A-defer-exit.md b/content/A-defer-exit.md index bb719c471..7361a2807 100644 --- a/content/A-defer-exit.md +++ b/content/A-defer-exit.md @@ -131,7 +131,7 @@ Meskipun `defer fmt.Println("halo")` ditempatkan sebelum `os.Exit()`, statement --- + diff --git a/content/A-encoding-base64.md b/content/A-encoding-base64.md index 5d4bbfd1d..b0f1255ee 100644 --- a/content/A-encoding-base64.md +++ b/content/A-encoding-base64.md @@ -83,7 +83,7 @@ fmt.Println(decodedString) --- + diff --git a/content/A-error-panic-recover.md b/content/A-error-panic-recover.md index dca1c4ff4..6f3ba2640 100644 --- a/content/A-error-panic-recover.md +++ b/content/A-error-panic-recover.md @@ -220,7 +220,7 @@ Bisa dilihat di dalam perulangan terdapat sebuah IIFE untuk recover panic dan ju --- + diff --git a/content/A-exec.md b/content/A-exec.md index 7c05f887e..e6943b853 100644 --- a/content/A-exec.md +++ b/content/A-exec.md @@ -55,7 +55,7 @@ Selain `.Output()` ada sangat banyak sekali API untuk keperluan komunikasi denga --- + diff --git a/content/A-file.md b/content/A-file.md index 58b386141..d68749919 100644 --- a/content/A-file.md +++ b/content/A-file.md @@ -154,7 +154,7 @@ func main() { --- + diff --git a/content/A-fungsi-closure.md b/content/A-fungsi-closure.md index b8e6ab54b..70801b73b 100644 --- a/content/A-fungsi-closure.md +++ b/content/A-fungsi-closure.md @@ -176,7 +176,7 @@ Output program: --- + diff --git a/content/A-fungsi-multiple-return.md b/content/A-fungsi-multiple-return.md index 2ac5893f0..e30d1a649 100644 --- a/content/A-fungsi-multiple-return.md +++ b/content/A-fungsi-multiple-return.md @@ -97,7 +97,7 @@ Fungsi `math.Pow()` digunakan untuk operasi pangkat nilai. `math.Pow(2, 3)` bera --- + diff --git a/content/A-fungsi-sebagai-parameter.md b/content/A-fungsi-sebagai-parameter.md index 0e27fde4d..b714c0a39 100644 --- a/content/A-fungsi-sebagai-parameter.md +++ b/content/A-fungsi-sebagai-parameter.md @@ -102,7 +102,7 @@ Variabel `result` bernilai `true` karena string `"ang"` merupakan bagian dari st --- + diff --git a/content/A-fungsi-variadic.md b/content/A-fungsi-variadic.md index 7263e9926..056ad76f7 100644 --- a/content/A-fungsi-variadic.md +++ b/content/A-fungsi-variadic.md @@ -147,7 +147,7 @@ Output program: --- + diff --git a/content/A-fungsi.md b/content/A-fungsi.md index dc748eec4..81a66aa39 100644 --- a/content/A-fungsi.md +++ b/content/A-fungsi.md @@ -177,7 +177,7 @@ Di dalamnya terdapat proses validasi nilai variabel pembagi, jika nilainya adala --- + diff --git a/content/A-go-vendoring.md b/content/A-go-vendoring.md index c2deefdb0..0489772c1 100644 --- a/content/A-go-vendoring.md +++ b/content/A-go-vendoring.md @@ -62,7 +62,7 @@ Konsekuensi penerapan vendoring adalah size project menjadi cukup besar. Untuk p --- + diff --git a/content/A-golang-generics.md b/content/A-golang-generics.md index e79828b1a..07e85c9e3 100644 --- a/content/A-golang-generics.md +++ b/content/A-golang-generics.md @@ -63,7 +63,7 @@ Penulisan notasi fungsi dengan Generic kurang lebih sebagai berikut: func FuncName[dataType +