Type Assertion
Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 17 dari 68.
Saat bekerja dengan variabel antarmuka, kamu sering perlu mengakses nilai konkret yang sebenarnya tersimpan di dalamnya. Di sinilah type assertion berguna, karena memungkinkan kamu mengambil dan menggunakan nilai yang mendasarinya dengan aman.
Type assertion menggunakan sintaks ini: value, ok := interfaceVariable.(Type). Nilai kembalian pertama adalah nilai yang diekstrak dengan tipe yang ditentukan, dan nilai kembalian kedua berupa boolean yang memberi tahu kamu apakah assertion berhasil.
var data interface{} = 42
number, ok := data.(int)
if ok {
fmt.Println("It's an integer:", number)
} else {
fmt.Println("Not an integer")
}Variabel ok sangat penting untuk keamanan. Jika kamu mencoba melakukan type assertion dengan tipe yang salah, ok akan bernilai false, dan value akan menjadi nilai nol dari tipe tersebut. Tanpa memeriksa ok, type assertion yang gagal akan menyebabkan programmu mengalami panic.
Type assertion sangat penting saat bekerja dengan nilai interface{}, karena memungkinkan kamu mengubah interface generik kembali menjadi tipe tertentu agar kamu dapat menggunakan method dan operasinya.
Tantangan
MudahDalam tantangan ini, kamu akan berlatih menggunakan type assertion untuk mengambil dan menggunakan nilai konkret dari variabel interface dengan aman. Kamu akan membuat penganalisis data yang memproses berbagai tipe nilai yang disimpan dalam interface kosong.
Kamu akan menerima dua input:
- String yang mewakili tipe data yang akan diperiksa (misalnya,
"int","string", atau"bool") - String yang mewakili nilai sebenarnya (misalnya,
"42","hello", atau"true")
Tugasmu adalah:
- Konversi string nilai ke tipe Go yang sesuai dan simpan dalam variabel
interface{}:- Untuk
"int": konversikan ke integer - Untuk
"string": gunakan sebagai string - Untuk
"bool": konversikan ke boolean
- Untuk
- Gunakan type assertion untuk memeriksa apakah variabel interface berisi tipe yang diharapkan, seperti yang ditentukan dalam input pertama
- Jika type assertion berhasil, cetak:
"Success: [value] is a [type]" - Jika type assertion gagal, cetak:
"Failed: value is not a [type]"
Kamu harus menggunakan sintaks type assertion yang aman dengan variabel ok untuk memeriksa apakah assertion berhasil. Tantangan ini menguji pemahamanmu tentang cara mengambil nilai konkret dari variabel interface dengan aman tanpa menyebabkan programmu mengalami panic.
Untuk konversi boolean, "true" harus dikonversi menjadi true dan string lainnya harus dikonversi menjadi false. Gunakan package strconv untuk konversi string ke integer.
Coba sendiri
package main
import (
"fmt"
"strconv"
)
func main() {
// Baca input
var dataType string
var valueStr string
fmt.Scanln(&dataType)
fmt.Scanln(&valueStr)
// Variabel untuk menyimpan nilai interface
var interfaceValue interface{}
// TODO: Tulis kodemu di bawah ini
// 1. Konversi valueStr ke tipe yang sesuai berdasarkan dataType, lalu simpan dalam interfaceValue
// 2. Gunakan type assertion untuk memeriksa apakah interfaceValue berisi tipe yang diharapkan
// 3. Tampilkan pesan keberhasilan atau kegagalan yang sesuai
}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