Interface Kosong

Pada sesi ini akan dibahas perbedaan antara Interface yang memiliki method dan Interface kosong

Interface kosong atau empty interface yang dinotasikan dengan interface{} merupakan tipe data yang bisa menampung segala jenis data seperti integer, string, boolean, bahkan array dan pointer, apapun. Untuk mendefenisikan Interface kosong, kita perlu mendeklarasikan tipe datanya yaitu interface yang ditambahkan {} sehingga menjadi interface{} .

Perbedaan dengan Interface sebelumnya adalah Interface kosong tidak memiliki method.

package main

import "fmt"

func main() {
	var random interface{}

	random = 25
	fmt.Println(random)

	random = "Golang"
	fmt.Println(random)

	random = []string{"Wisma", "Yudis", "Guntur", "Sukisno"}
	fmt.Println(random)
}

Pada kode di atas kita membuat variabel bernama random dengan tipe data interface . Lalu kita meng-assign beberapa nilai dengan tipe data yang berbeda-beda ke dalam variabel random .

Menampilkan nilai dari variabel random

Kita lihat contoh tipe data map yang memiliki key dengan tipe data string dan value dengan tipe data apapun.

package main

import "fmt"

func main() {
	var random map[string]interface{}

	random = map[string]interface{}{
		"name":     "David Winalda",
		"age":      26,
		"language": []string{"golang", "scala", "rush"},
	}
	fmt.Println(random)
}
Menampilkan isi dari variabel random

Casting Variabel Interface Kosong

Kita akan melihat tipe data yang ada pada variabel dengan tipe interface yang telah kita assign dengan beberapa nilai dari tipe data yang berbeda.

package main

import "fmt"

func main() {
	var random interface{}

	random = 25
	fmt.Printf("Value: %v, Data Type: %T\n", random, random)

	random = "Golang"
	fmt.Printf("Value: %v, Data Type: %T\n", random, random)

	random = []string{"Wisma", "Yudis", "Guntur", "Sukisno"}
	fmt.Printf("Value: %v, Data Type: %T\n", random, random)
}
Menampilkan tipe data dari variabel random

Kita bisa melihat bahwa tipe data sudah sesuai dengan nilai yang kita masukkan ke dalam variabel.

Kita akan melakukan operasi dari nilai variabel yang didefinisikan sebagai interface.

package main

import "fmt"

func main() {
	var a interface{}
	var b int = 10

	a = 25
	fmt.Printf("Value: %v, Data Type: %T\n", a, a)

	sum := a + b
	fmt.Println(sum)
}
Error saat melakukan operasi pada variabel bertipe interface

Kita lihat bahwa output program menampilkan error saat melakukan operasi penambahan dari dua variabel yaitu a dengan tipe interface dan b dengan tipe int .

Untuk dapat melakukan operasi di atas kita perlu melakukan casting atau convert ke tipe data aslinya. Ini juga biasa disebut dengan Type Assertion.

package main

import "fmt"

func main() {
	var a interface{}
	var b int = 10

	a = 25
	
	// casting variabel a ke tipe aslinya yaitu int
	sum := a.(int) + b
	fmt.Println(sum)
}
Menampilkan hasil penambahan dari variabel a dan b

Penerapan slice dengan Interface

Dengan Interface kita dapat memiliki data struct yang berisi nilai dengan tipe data apapun.

package main

import "fmt"

func main() {
	var data = []interface{}{"David Winalda", 26, true}
	fmt.Println(data)
}
Menampilkan isi variabel data dengan tipe struct

Last updated

Was this helpful?