Artikel ini merupakan bagian dari seri Belajar Golang Dari Dasar

Type Assertions

Type assertions adalah sebuah cara untuk merubah tipe data tertentu menjadi tipe data yang kita inginkan. Fitur type assertions biasanya sangat berguna ketika kita berurusan dengan interface kosong.

Untuk menggunakan type assertions, kita cukup mengunakan format seperti ini:

value.(type)

Value adalah variabel atau nilai yang ingin kita ubah tipe datanya, sedangkan type adalah tipe yang ingin digunakan.

Contoh kode:

package main

import "fmt"

func main() {
	// membuat variabel name dengan tipe interface kosong
	var name interface{}

	// mengisi variabel dengan data string,
	// saat ini variable masih bertipe interface kosong
	name = "Rizky"

	// melakukan type assertions,
	// merubah tipe interface kosong menjadi string
	nameString := name.(string)

	fmt.Println(nameString)
}

Saat menggunakan type assertion, jangan sampai kita menggunakan tipe data yang salah. Misalnya ketika variabel name yang berisi data string kita ubah mnjadi integer, maka akan terjadi panic di program kita.

var name interface{}

name = "Rizky"

nameString := name.(string) // Ok

nameInt := name.(int) // panic

Menggunakan Switch Expression Untuk Type Assertions

Type assertion akan menyebabkan panic saat tipe yang diubah tidak sesuai, hal ini akan berbahaya jika kita tidak melakukan recover untuk panic yang terjadi. Ada cara alternatif yang bisa kita lakukan yaitu menggunakan switch expression.

Contoh kode:

var age interface{}
	age = 22

	switch dataType := age.(type) {
	case string:
		fmt.Println(dataType, "adalah string")
	case int:
		fmt.Println(dataType, "adalah integer")
	case bool:
		fmt.Println(dataType, "adalah boolean")
	default:
		fmt.Println(dataType, "belum tau")
	}

Kode age.(type) digunakan untuk mendapatkan tipe dari variabel age. Hasil yang didapatkan kemudian digunakan untuk pengecekan pada switch expression untuk ditangani dengan kode yang berbeda antara tipe string, integer, boolean, dan tipe lain.

Berikutnya #35: Pointer

Bagikan:

Ingin Berdiskusi?

Yuk bergabung di Grup Telegram Ruang Developer atau mulai diskusi melalui GitHub. See You!

comments powered by Disqus

Berlangganan Gratis

Kamu akan menerima email update dari Ruang Developer

Beri Dukungan

Beri dukungan, dapatkan full source code project web untuk bahan referensi, tiru, dan modifikasi.

Lightbox