Sobes.tech
Middle

Waarom kan een lege interface in Go naar elk type worden geconverteerd?

sobes.tech AI

Antwoord van AI

De lege interface interface{} bevat geen methoden. Elke type in Go kan voldoen aan een interface die geen methoden vereist. Daarom kan de waarde van elk type worden toegewezen aan een variabele van het type interface{} of worden doorgegeven aan een functie die interface{} accepteert. In wezen is interface{} een container voor een waarde van elk type, die zowel de waarde zelf als het type ervan opslaat.

package main

import "fmt"

func main() {
	var i interface{} // Declareer een variabele van een lege interface

	i = 42            // Wijs een int toe
	fmt.Printf("Waarde: %v, Type: %T\n", i, i)

	i = "hallo"     // Wijs een string toe
	fmt.Printf("Waarde: %v, Type: %T\n", i, i)

	i = true        // Wijs een bool toe
	fmt.Printf("Waarde: %v, Type: %T\n", i, i)

	i = struct{}{}  // Wijs een lege structuur toe
	fmt.Printf("Waarde: %v, Type: %T\n", i, i)
}

Conversie van interface{} naar een specifiek type is mogelijk met behulp van type assertion of een type switch.

package main

import "fmt"

func main() {
	var i interface{} = "wereld"

	// Type assertion
	s, ok := i.(string) // controleer of de waarde een string is
	if ok {
		fmt.Println("Type assertion geslaagd:", s)
	} else {
		fmt.Println("Type assertion mislukt")
	}

	// Type switch
	switch v := i.(type) {
	case int:
		fmt.Println("Type is int, waarde:", v)
	case string:
		fmt.Println("Type is string, waarde:", v)
	default:
		fmt.Println("Onbekend type")
	}
}