# Socket ## Go Basic ### `for` Statement `for` syntax: ```go for ekspresi_1, ekspresi_2; eksprtesi_3 { // ... } ``` Contoh: ```go package main import "fmt" func main() { sum := 0; for index := 0; index < 10; index++ { sum += index } fmt.Println("sum = ", sum) } ``` Output: ``` sum = 45 ``` Kita dapat tidak menuliskan `ekspresi_1` dan `ekspresi_2`: ```go sum := 1 for ; sum < 1000; { sum += sum } ``` Kita dapat juga tidak menuliskan `;`. Ini sama seperti `while`: ```go sum := 1 for sum < 1000 { sum += sum } ``` Loop `for` dapat membaca data dari `array`, `slice`, `map`, dan `string` ketika digunakan bersama dengan `range`: ```go for k, v := range map { fmt.Println("map's key: ", k) fmt.Println("map's value: ", v) } ``` Karena Go mendukung nilai kembali lebih dari satu dan memberikan error kompilasi ketika kita tidak menggunakan nilai-nillai yang dikembalikan, kita dapat menggunakan `_` untuk mengabaikan nilai kembali tertentu: ```go for _, v := range map { fmt.Println("map's val: ", v) } ``` Kita dapat menuliskan loop infinite yang ekuivalen dengan `while true { ... }` di bahasa lain: ```go for { // statement } ``` ## 3.5 Object Oriented ### Method Misalkan kita mendefinisikan sebuah struct "rectangle" dan kita ingin menghitung luasnya. Kita dapat menggunakan kode berikut untuk mencapai tujuan ini: ```go package main import "fmt" type Rectangle struct { width, height float64 } func area(r Rectangle) float64 { return r.width * r.height } func main() { r1 := Rectangle{12, 2} r2 := Rectangle{9, 4} fmt.Println("Area r1 = ", area(r1)) fmt.Println("Area r2 = ", area(r2)) } ``` Kode di atas menggunakan sebuah fungsi bernama `area` yang menerima sebuah argument berupa struct `Rectangle` dan mengembalikan sebuah nilai `float64`. Kita dapat menuliskan method untuk kode di atas. Syntax dari method: ```go func (r ReceiverType) namaFungsi(parameter...) (nilaiReturn) ``` Kode di atas jika dituliskan menggunakan method: ```go package main import { "fmt" "math" } type Circle struct { radius float64 } type Rectangle struct { width, height float64 } // method func (c Circle) Area() float64 { return c.radius * c.radius * math.Pi } // method func (r Rectangle) Area() float64 { return r.width * r.height } func main() { c1 := Circle{10} } ``` ## 8.1 Socket