Any / interface kosong
Tipe yang ditempati semua nilai — dan kapan memakainya.
Pahami konsepnya
Interface tanpa method sama sekali disebut interface kosong: interface{}. Sejak Go 1.18, nama pendeknya adalah any. Karena kontraknya kosong, semua tipe memenuhinya. Contoh memakai interface{} agar dapat dijalankan dengan compiler Go 1.13 di situs ini.
fmt.Println dapat menerima nilai dengan tipe berbeda dalam satu panggilan. Pada Go modern parameternya ditulis ...any; pada Go lama bentuk setaranya ...interface{}. Untuk koleksi campuran juga ada []interface{} atau []any pada Go modern.
Sebelum menggunakan nilainya sebagai tipe konkret, periksa dengan type assertion atau type switch. Jika tipe bisa dipastikan sejak awal, gunakan tipe konkret atau generics pada Go 1.18+.
Coba contoh kode
package main
import "fmt"
func tampilSemua(nilai ...interface{}) {
for _, v := range nilai {
fmt.Print(v, " ")
}
fmt.Println()
}
func main() {
tampilSemua("umur", 17, 55.5, true, []int{1, 2})
}Satu panggilan tampilSemua menampung lima nilai bertipe berbeda karena parameter ...any. Di dalam loop, tiap v bertipe any — bisa dicetak, tetapi untuk dihitung atau dibandingkan perlu dikembalikan ke tipe aslinya dulu lewat assertion.
Menarik tipe kembali dari any
package main
import (
"fmt"
"strings"
)
func main() {
var data interface{} = 42
if n, ok := data.(int); ok {
fmt.Println("angka:", n*2) // angka: 84
}
data = "golang"
if s, ok := data.(string); ok {
fmt.Println("teks:", strings.ToUpper(s)) // teks: GOLANG
}
}Bentuk dua nilai data.(int) mengembalikan isi plus keberhasilan — ok false tidak membuat program jatuh, hanya berarti tipenya bukan int. Pola ini adalah satu-satunya jalan aman membongkar isi any.
Latihan singkat
Uji: jumlahkan hanya elemen bertipe int lewat type assertion — program harus mencetak persis `59`.