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} // sliceIni 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{}.
Tantangan
MudahDalam 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:
- Membuat fungsi bernama
processDatayang menerima parameterinterface{}dan mencetak informasi tentang nilai tersebut - 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
- Untuk
- Memanggil fungsi
processDatadengan nilai yang sudah dikonversi - 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
}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