Menu
CoddyTech

Interface Kosong

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

Sejauh ini, kamu telah menggunakan antarmuka yang memerlukan method tertentu, tetapi Go memiliki antarmuka khusus yang sangat fleksibel: antarmuka kosong, ditulis sebagai interface{}.

Interface kosong sama sekali tidak memiliki persyaratan method, yang berarti tipe apa pun di Go otomatis memenuhinya. Karena setiap tipe mengimplementasikan nol method (minimal), 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 situasi ini saat membaca file konfigurasi, menangani input pengguna, atau bekerja dengan API yang mengembalikan tipe data berbeda tergantung situasinya.

Namun, karena interface kosong dapat menyimpan 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 jenis 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 ke tipe Go yang sesuai:
    • Untuk "int": konversikan ke integer
    • Untuk "string": gunakan sebagai string
    • Untuk "bool": konversikan ke boolean
    • Untuk "slice": konversikan nilai yang dipisahkan koma menjadi slice integer
  3. Memanggil fungsi processData dengan nilai yang sudah dikonversi
  4. Di dalam processData, mencetak 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{}, yang menunjukkan bahwa interface kosong dapat menampung nilai dengan tipe apa pun. Gunakan fmt.Printf dengan kata kerja 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