> For the complete documentation index, see [llms.txt](https://davidwinalda94.gitbook.io/mastering-golang/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://davidwinalda94.gitbook.io/mastering-golang/channel-direction.md).

# Channel - Direction

Pada sesi ini akan dibahas bahwa kita bisa menetapkan suatu fungsi sebagai pengirim saja, penerima saja, atau keduanya

Kita bisa menentukan level akses channel apakah hanya sebagai penerima, pengirim, atau penerima sekaligus pengirim. Konsep ini disebut dengan **channel direction**.

Cara pemberian level akses adalah dengan menambahkan tanda `<-` sebelum atau setelah keyword `chan`. Untuk lebih jelasnya bisa dilihat pada tabel berikut.

| Sintaks            | Penjelasan                                                             |
| ------------------ | ---------------------------------------------------------------------- |
| `ch chan string`   | Parameter `ch` bisa digunakan untuk **mengirim** dan **menerima** data |
| `ch chan<- string` | Parameter `ch` hanya bisa digunakan untuk **mengirim** data            |
| `ch <-chan string` | Parameter `ch` hanya bisa digunakan untuk **menerima** data            |

```go
package main

import (
	"fmt"
)

func sender(c chan<- string) {
	c <- "Ping"
}

func receiver(c <-chan string) {
	msg := <-c
	fmt.Println(msg)
}

func main() {
	ch := make(chan string)
	go sender(ch)
	go receiver(ch)

	var input string
	fmt.Scanln(&input)
}
```
