Menu
CoddyTech

Interface Kosong

Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 16 dari 68.

Sejauh ini kamu telah bekerja dengan antarmuka yang memerlukan metode tertentu, tetapi Go memiliki antarmuka khusus yang sangat fleksibel: antarmuka kosong, ditulis sebagai interface{}. Sejak Go 1.18, kamu juga bisa menulisnya sebagai any, alias bawaan yang artinya sama persis dengan interface{}.

Interface kosong tidak memiliki persyaratan method sama sekali, yang berarti tipe apa pun di Go otomatis memenuhi interface tersebut. Karena setiap tipe mengimplementasikan nol method (setidaknya), setiap tipe dapat ditetapkan ke variabel interface{}:

var anything interface{}
anything = 42        // int
anything = "hello"   // string
anything = true      // bool
anything = []int{1, 2, 3}  // slice

Ini membuat interface{} sangat berguna saat kamu perlu bekerja dengan data yang tipe datanya tidak diketahui atau beragam. Kamu mungkin menemui hal ini saat membaca file konfigurasi, menangani input pengguna, atau bekerja dengan API yang mengembalikan tipe data berbeda tergantung situasinya.

Namun, karena interface kosong dapat menampung tipe apa pun, kamu sering perlu menentukan tipe apa yang sebenarnya tersimpan di dalamnya sebelum dapat menggunakan nilainya dengan tepat. Di sinilah type assertion dan type switch (yang akan kamu pelajari selanjutnya) menjadi alat penting untuk bekerja dengan aman menggunakan nilai interface{}.

challenge icon

Tantangan

Mudah

Dalam tantangan ini, kamu akan berlatih menggunakan interface kosong dengan membuat pemroses data yang dapat menangani berbagai tipe nilai. Kamu akan membuat fungsi yang menerima parameter interface{} dan memproses berbagai tipe data.

Kamu akan menerima dua input:

  • String yang mewakili tipe data (misalnya, "int", "string", "bool", atau "slice")
  • String yang mewakili nilai sebenarnya (misalnya, "42", "hello", "true", atau "1,2,3")

Tugasmu adalah:

  1. Membuat fungsi bernama processData yang menerima parameter interface{} dan mencetak informasi tentang nilai tersebut
  2. Berdasarkan input tipe data, mengonversi string nilai menjadi tipe Go yang sesuai:
    • Untuk "int": konversikan menjadi integer
    • Untuk "string": gunakan sebagai string
    • Untuk "bool": konversikan menjadi boolean
    • Untuk "slice": konversikan nilai yang dipisahkan koma menjadi slice integer
  3. Memanggil fungsi processData dengan nilai yang telah dikonversi
  4. Di dalam processData, cetak nilai dan tipenya dengan format: "Value: [value], Type: [type]"

Untuk input slice, string yang dipisahkan koma seperti "1,2,3" harus dikonversi menjadi []int{1, 2, 3}. Fungsi ini harus dapat bekerja dengan tipe apa pun karena menerima interface{}. Ini menunjukkan cara interface kosong dapat menampung nilai dari tipe apa pun. Gunakan fmt.Printf dengan kata format %v dan %T untuk menampilkan nilai dan tipe secara berurutan.

Coba sendiri

package main

import (
	"fmt"
)

func main() {
	// Baca input
	var dataType string
	var valueStr string
	fmt.Scanln(&dataType)
	fmt.Scanln(&valueStr)
	
	// TODO: Tulis kodemu di bawah ini
	// 1. Buat fungsi processData yang menerima interface{}
	// 2. Konversi valueStr ke tipe yang sesuai berdasarkan dataType
	// 3. Panggil processData dengan nilai yang sudah dikonversi
	
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika & Alur

Latihan sendiri: Compiler Go online