---
# System prepended metadata

title: Socket

---

# 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

