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} // sliceIni 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{}.
Tantangan
MudahDalam 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:
- Membuat fungsi bernama
processDatayang menerima parameterinterface{}dan mencetak informasi tentang nilai tersebut - 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
- Untuk
- Memanggil fungsi
processDatadengan nilai yang telah dikonversi - 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
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika & Alur
1Alur Kontrol Lanjutan
switch dengan `fallthrough`Keluar dari Perulangan BersarangMelanjutkan Perulangan TertentuPernyataan `goto`Rangkuman, Kontrol Perulangan Lanjutan4Proyek: Daftar Tugas Sederhana
Menyiapkan ProyekMenambahkan Tugas2Struct dan Method
Mendefinisikan Method pada StructPenerima NilaiPenerima PointerMemilih PenerimaMethod vs FungsiRekap: Perilaku Struct5Map secara Mendalam
Map Berisi StructPointer sebagai Nilai MapMenguji Map NilMembandingkan MapRingkasan: Penghitung Frekuensi Kata8Proyek: Inventaris Sederhana
Gambaran Umum ProyekMemeriksa Stok3Interface (Dasar)
Apa Itu Interface?Mendefinisikan InterfaceMengimplementasikan InterfaceMenggunakan Tipe InterfaceInterface KosongType AssertionType SwitchRingkasan: Bentuk dan PerilakuLatihan sendiri: Compiler Go online