forked from novalagung/dasarpemrogramangolang
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit a34d648
Showing
409 changed files
with
20,869 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
name: Update website | ||
|
||
on: | ||
push: | ||
branches: | ||
- master | ||
|
||
jobs: | ||
job_deploy_website: | ||
name: 'Deploy website' | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v1 | ||
- uses: actions/setup-node@v1 | ||
with: | ||
node-version: '10.x' | ||
- uses: actions/setup-go@v1 | ||
with: | ||
go-version: 1.13 | ||
- name: 'Installing gitbook cli' | ||
run: npm install -g gitbook-cli | ||
- name: 'Generating distributable files' | ||
run: | | ||
cp book.json.template book.json | ||
gitbook install | ||
gitbook build | ||
go run website-adjustment.go | ||
cd _book | ||
rm -rf LICENSE | ||
rm -rf book* | ||
rm -rf .git | ||
rm -rf .gitignore | ||
rm -rf .github | ||
rm -rf *.md | ||
rm -rf *.sh | ||
rm -rf *.psd | ||
rm -rf *.go | ||
- uses: peaceiris/[email protected] | ||
env: | ||
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }} | ||
PUBLISH_BRANCH: gh-pages | ||
PUBLISH_DIR: ./_book | ||
job_deploy_ebooks: | ||
name: 'Deploy ebooks' | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v1 | ||
- uses: actions/setup-node@v1 | ||
with: | ||
node-version: '10.x' | ||
- name: 'Installing gitbook cli' | ||
run: npm install -g gitbook-cli | ||
- name: 'Installing calibre' | ||
run: sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sudo sh /dev/stdin | ||
- name: 'Preparing for ebooks generations' | ||
run: | | ||
cp book.json.template book.json | ||
mkdir _book | ||
gitbook install | ||
- name: 'Generating ebook in pdf' | ||
run: gitbook pdf ./ ./_book/dasarpemrogramangolang.pdf | ||
- name: 'Generating ebook in epub' | ||
run: gitbook epub ./ ./_book/dasarpemrogramangolang.epub | ||
- name: 'Generating ebook in mobi' | ||
run: gitbook mobi ./ ./_book/dasarpemrogramangolang.mobi | ||
- uses: peaceiris/[email protected] | ||
env: | ||
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }} | ||
PUBLISH_BRANCH: ebooks | ||
PUBLISH_DIR: ./_book |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
# Node rules: | ||
## Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) | ||
.grunt | ||
|
||
## Dependency directory | ||
## Commenting this out is preferred by some people, see | ||
## https://docs.npmjs.com/misc/faq#should-i-check-my-node_modules-folder-into-git | ||
node_modules | ||
|
||
# Book build output | ||
_book | ||
|
||
# eBook build output | ||
*.epub | ||
*.mobi | ||
|
||
# custom | ||
web/# Logs | ||
logs | ||
*.log | ||
npm-debug.log* | ||
yarn-debug.log* | ||
yarn-error.log* | ||
|
||
# Runtime data | ||
pids | ||
*.pid | ||
*.seed | ||
*.pid.lock | ||
|
||
# Directory for instrumented libs generated by jscoverage/JSCover | ||
lib-cov | ||
|
||
# Coverage directory used by tools like istanbul | ||
coverage | ||
|
||
# nyc test coverage | ||
.nyc_output | ||
|
||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) | ||
.grunt | ||
|
||
# Bower dependency directory (https://bower.io/) | ||
bower_components | ||
|
||
# node-waf configuration | ||
.lock-wscript | ||
|
||
# Compiled binary addons (https://nodejs.org/api/addons.html) | ||
build/Release | ||
|
||
# Dependency directories | ||
node_modules/ | ||
jspm_packages/ | ||
|
||
# TypeScript v1 declaration files | ||
typings/ | ||
|
||
# Optional npm cache directory | ||
.npm | ||
|
||
# Optional eslint cache | ||
.eslintcache | ||
|
||
# Optional REPL history | ||
.node_repl_history | ||
|
||
# Output of 'npm pack' | ||
*.tgz | ||
|
||
# Yarn Integrity file | ||
.yarn-integrity | ||
|
||
# dotenv environment variables file | ||
.env | ||
|
||
# parcel-bundler cache (https://parceljs.org/) | ||
.cache | ||
|
||
# next.js build output | ||
.next | ||
|
||
# nuxt.js build output | ||
.nuxt | ||
|
||
# vuepress build output | ||
.vuepress/dist | ||
|
||
# Serverless directories | ||
.serverless |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
# A.1. Berkenalan Dengan Golang | ||
|
||
**Golang** (atau biasa disebut dengan **Go**) adalah bahasa pemrograman baru yang dikembangkan di **Google** oleh **Robert Griesemer**, **Rob Pike**, dan **Ken Thompson** pada tahun 2007 dan mulai diperkenalkan di publik tahun 2009. | ||
|
||
Penciptaan bahasa Go didasari bahasa **C** dan **C++**, oleh karena itu gaya sintaks-nya mirip. | ||
|
||
## A.1.1. Kelebihan Go | ||
|
||
Go memiliki kelebihan dibanding bahasa lainnya, beberapa di antaranya: | ||
|
||
* Mendukung konkurensi di level bahasa dengan pengaplikasian cukup mudah | ||
* Mendukung pemrosesan data dengan banyak prosesor dalam waktu yang bersamaan *(pararel processing)* | ||
* Memiliki garbage collector | ||
* Proses kompilasi sangat cepat | ||
* Bukan bahasa pemrograman yang hirarkial, menjadikan developer tidak perlu *ribet* memikirkan segmen OOP-nya | ||
* Package/modul yang disediakan terbilang lengkap. Karena bahasa ini open source, banyak sekali developer yang juga mengembangkan modul-modul lain yang bisa dimanfaatkan | ||
|
||
Sudah banyak industri dan perusahaan yg menggunakan Go sampai level production, termasuk diantaranya adalah Google sendiri, dan juga tempat dimana penulis bekerja 😁 | ||
|
||
--- | ||
|
||
Di buku ini (terutama semua serial bab A) kita akan belajar tentang dasar pemrograman Go, mulai dari 0. | ||
|
||
![The Go Logo](images/A.1_1_logo.png) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
# A.10. Konstanta | ||
|
||
Konstanta adalah jenis variabel yang nilainya tidak bisa diubah. Inisialisasi nilai hanya dilakukan sekali di awal, setelah itu variabel tidak bisa diubah nilainya. | ||
|
||
## A.10.1. Penggunaan Konstanta | ||
|
||
Data seperti **pi** (22/7), kecepatan cahaya (299.792.458 m/s), adalah contoh data yang tepat jika dideklarasikan sebagai konstanta daripada variabel, karena nilainya sudah pasti dan tidak berubah. | ||
|
||
Cara penerapan konstanta sama seperti deklarasi variabel biasa, selebihnya tinggal ganti keyword `var` dengan `const`. | ||
|
||
```go | ||
const firstName string = "john" | ||
fmt.Print("halo ", firstName, "!\n") | ||
``` | ||
|
||
Teknik type inference bisa diterapkan pada konstanta, caranya yaitu cukup dengan menghilangkan tipe data pada saat deklarasi. | ||
|
||
```go | ||
const lastName = "wick" | ||
fmt.Print("nice to meet you ", lastName, "!\n") | ||
``` | ||
|
||
### A.10.1.1. Penggunaan Fungsi `fmt.Print()` | ||
|
||
Fungsi ini memiliki peran yang sama seperti fungsi `fmt.Println()`, pembedanya fungsi `fmt.Print()` tidak menghasilkan baris baru di akhir outputnya. | ||
|
||
Perbedaan lainnya adalah, nilai pada parameter-parameter yang dimasukkan ke fungsi tersebut digabungkan tanpa pemisah. Tidak seperti pada fungsi `fmt.Println()` yang nilai paremeternya digabung menggunakan penghubung spasi. | ||
|
||
```go | ||
fmt.Println("john wick") | ||
fmt.Println("john", "wick") | ||
|
||
fmt.Print("john wick\n") | ||
fmt.Print("john ", "wick\n") | ||
fmt.Print("john", " ", "wick\n") | ||
``` | ||
|
||
Kode di atas menunjukkan perbedaan antara `fmt.Println()` dan `fmt.Print()`. Output yang dihasilkan oleh 5 statement di atas adalah sama, meski cara yang digunakan berbeda. | ||
|
||
Bila menggunakan `fmt.Println()` tidak perlu menambahkan spasi di tiap kata, karena fungsi tersebut akan secara otomatis menambahkannya di sela-sela nilai. Berbeda dengan `fmt.Print()`, perlu ditambahkan spasi, karena fungsi ini tidak menambahkan spasi di sela-sela nilai parameter yang digabungkan. | ||
|
||
--- | ||
|
||
<div class="source-code-link"> | ||
<div class="source-code-link-message">Source code praktek pada bab ini tersedia di Github</div> | ||
<a href="https://github.com/novalagung/dasarpemrogramangolang/tree/master/chapter-A.10-konstanta">https://github.com/novalagung/dasarpemrogramangolang/.../chapter-A.10...</a> | ||
</div> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
# A.11. Operator | ||
|
||
Bab ini membahas mengenai macam operator yang bisa digunakan di Go. Secara umum terdapat 3 kategori operator: aritmatika, perbandingan, dan logika. | ||
|
||
## A.11.1. Operator Aritmatika | ||
|
||
Operator aritmatika adalah operator yang digunakan untuk operasi yang sifatnya perhitungan. Go mendukung beberapa operator aritmatika standar, list-nya bisa dilihat di tabel berikut. | ||
|
||
| Tanda | Penjelasan | | ||
| :---: | :--------- | | ||
| `+` | penjumlahan | | ||
| `-` | pengurangan | | ||
| `*` | perkalian | | ||
| `/` | pembagian | | ||
| `%` | modulus / sisa hasil pembagian | | ||
|
||
Contoh penggunaan: | ||
|
||
```go | ||
var value = (((2 + 6) % 3) * 4 - 2) / 3 | ||
``` | ||
|
||
## A.11.2. Operator Perbandingan | ||
|
||
Operator perbandingan digunakan untuk menentukan kebenaran suatu kondisi. Hasilnya berupa nilai boolean, `true` atau `false`. | ||
|
||
Tabel di bawah ini berisikan operator perbandingan yang bisa digunakan di Go. | ||
|
||
| Tanda | Penjelasan | | ||
| :---: | :--------- | | ||
| `==` | apakah nilai kiri **sama dengan** nilai kanan | | ||
| `!=` | apakah nilai kiri **tidak sama dengan** nilai kanan | | ||
| `<` | apakah nilai kiri **lebih kecil daripada** nilai kanan | | ||
| `<=` | apakah nilai kiri **lebih kecil atau sama dengan** nilai kanan | | ||
| `>` | apakah nilai kiri **lebih besar dari** nilai kanan | | ||
| `>=` | apakah nilai kiri **lebih besar atau sama dengan** nilai kanan | | ||
|
||
Contoh penggunaan: | ||
|
||
```go | ||
var value = (((2 + 6) % 3) * 4 - 2) / 3 | ||
var isEqual = (value == 2) | ||
|
||
fmt.Printf("nilai %d (%t) \n", value, isEqual) | ||
``` | ||
|
||
Pada kode di atas, terdapat statement operasi aritmatika yang hasilnya ditampung oleh variabel `value`. Selanjutnya, variabel tersebut tersebut dibandingkan dengan angka **2** untuk dicek apakah nilainya sama. Jika iya, maka hasilnya adalah `true`, jika tidak maka `false`. Nilai hasil operasi perbandingan tersebut kemudian disimpan dalam variabel `isEqual`. | ||
|
||
![Penggunaan operator perbandingan](images/A.11_1_operator_comparison.png) | ||
|
||
Untuk memunculkan nilai `bool` menggunakan `fmt.Printf()`, bisa gunakan layout format `%t`. | ||
|
||
## A.11.3. Operator Logika | ||
|
||
Operator ini digunakan untuk mencari benar tidaknya kombinasi data bertipe `bool` (bisa berupa variabel bertipe `bool`, atau hasil dari operator perbandingan). | ||
|
||
Beberapa operator logika standar yang bisa digunakan: | ||
|
||
| Tanda | Penjelasan | | ||
| :---: | :--------- | | ||
| `&&` | kiri **dan** kanan | | ||
| <code>||</code> | kiri **atau** kanan | | ||
| `!` | negasi / nilai kebalikan | | ||
|
||
Contoh penggunaan: | ||
|
||
```go | ||
var left = false | ||
var right = true | ||
|
||
var leftAndRight = left && right | ||
fmt.Printf("left && right \t(%t) \n", leftAndRight) | ||
|
||
var leftOrRight = left || right | ||
fmt.Printf("left || right \t(%t) \n", leftOrRight) | ||
|
||
var leftReverse = !left | ||
fmt.Printf("!left \t\t(%t) \n", leftReverse) | ||
``` | ||
|
||
Hasil dari operator logika sama dengan hasil dari operator perbandingan, yaitu berupa boolean. | ||
|
||
![Penerapan operator logika](images/A.11_2_operator_logical.png) | ||
|
||
Berikut penjelasan statemen operator logika pada kode di atas. | ||
|
||
- `leftAndRight` bernilai `false`, karena hasil dari `false` **dan** `true` adalah `false`. | ||
- `leftOrRight` bernilai `true`, karena hasil dari `false` **atau** `true` adalah `true`. | ||
- `leftReverse` bernilai `true`, karena **negasi** (atau lawan dari) `false` adalah `true`. | ||
|
||
Template `\t` digunakan untuk menambahkan indent tabulasi. Biasa dimanfaatkan untuk merapikan tampilan output pada console. | ||
|
||
--- | ||
|
||
<div class="source-code-link"> | ||
<div class="source-code-link-message">Source code praktek pada bab ini tersedia di Github</div> | ||
<a href="https://github.com/novalagung/dasarpemrogramangolang/tree/master/chapter-A.11-operator">https://github.com/novalagung/dasarpemrogramangolang/.../chapter-A.11...</a> | ||
</div> |
Oops, something went wrong.