Membuat channel sebagai parameter

Golang – Menggunakan channel sebagai parameter

Dalam kenyataannya saat membuat aplikasi, sering kita akan mengirim channel ke function lain via parameter, sebelumnya kita sudah mencoba menggunakan anonymous function nah sebenarnya nanti kita akan jarang sekali menggunakan anonymous function. Nantinya di kenyataannya kita akan membuat sebuah function dan menggunakan parameter untuk mengiim channel nya.

Sebelumnya kita sudah tau jika di golang by default, parameter adalah pass by value, artinya value akan di duplikasi lalu dikirim ke function parameter, sehingga jika kita ingin mengirim data asli, kita biasa gunakan pointer (pass by reference). Berbeda dengan channel, kita tidak perlu melakukan hal tersebut karena by default channel sudah pass by reference.

Kode program channel sebagai parameter

Masih sama seperti artikel sebelumnya kita akan menambahkan function baru pada file channel_test.go, pada file tersebut isikan baris kode berikut

func GiveMeResponse(channel chan string) {
	time.Sleep(2 * time.Second)
	channel <- "Rendy Wijaya"
}

func TestChannelAsParam(t *testing.T) {
	channel := make(chan string)
	defer close(channel)

	go GiveMeResponse(channel)
	data := <-channel
	fmt.Println(data)
}
Membuat channel sebagai parameter
Membuat channel sebagai parameter

Pada gambar diatas kita membuat function baru yang menerima parameter berupa channel pada baris ke 24, kemudian di dalam function tersebut kita mengirim data "Rendy Wijaya" ke channel. Selanjutnya seperti sebelumnya kita menjalankan function tersebut dengan goroutine di baris ke 33, bedanya saat ini kita mengirim channel sebagai parameter nya. Dan pada baris 34 barulah kita mengambil data dari channel kemudian terakir pada baris ke 35 kita menampilkannya ke terminal.

Setelah ditambah function di atas maka isi full kode pada file channel_test.go seperti berikut

package belajar_golang_goroutines

import (
	"fmt"
	"testing"
	"time"
)

func TestCreateChannel(t *testing.T) {
	channel := make(chan string)
	defer close(channel)

	go func() {
		time.Sleep(2 * time.Second)
		channel <- "Rendy Wijaya"
		fmt.Println("Selesai mengirim data ke channel")
	}()

	data := <-channel
	fmt.Println("Data", data)
	time.Sleep(5 * time.Second)
}

func GiveMeResponse(channel chan string) {
	time.Sleep(2 * time.Second)
	channel <- "Rendy Wijaya"
}

func TestChannelAsParam(t *testing.T) {
	channel := make(chan string)
	defer close(channel)

	go GiveMeResponse(channel)
	data := <-channel
	fmt.Println(data)
}

Sekarang coba jalankan unit test TestChannelAsParam dan perhatikan outputnya, jika kita sudah berhasil mengirim dan mengambil data dari channel

Output dari baris kode channel as parameter
Output dari baris kode channel as parameter

Penutup

Pada artikel kali ini kita telah belajar tentang channel sebagai parameter pada bahasa pemrogaman go. Dan pada artikel selanjutnya saya akan membahas channel in dan out pada bahasa pemrogaman go.

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar

About Me

About Me

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam.

Social Profiles

Facebook