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)
}

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

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.