Sobes.tech
Junior

What is the role of an empty interface in Go?

sobes.tech AI

Answer from AI

The empty interface interface{} in Go can hold values of any type. This makes it useful for the following scenarios:

  • Functions working with data types unknown at compile time. For example, the standard library fmt.Println accepts arguments of type interface{}.
  • Storing mixed data types in collections. A slice []interface{} can contain elements of different types.
  • Implementing polymorphism when specific types are not known in advance.

However, using the empty interface requires performing a type assertion or a type switch at runtime to access the actual value and its methods, which can be less type-safe and performant compared to using specific types or more specialized interfaces.

// Example of using the empty interface
var data interface{}
data = 10         // data now holds an int
data = "hello"    // data now holds a string
data = true       // data now holds a bool

// Type assertion to access the value
if value, ok := data.(string); ok {
	// value is a string
	_ = value
}

// Type switch
switch v := data.(type) {
case int:
	// v is an int
	_ = v
case string:
	// v is a string
	_ = v
default:
	// Unknown type
}