Basic interfaces

April 7, 2023

Basic interfaces

In its most basic form an interface specifies a (possibly empty) list of methods. The type set defined by such an interface is the set of types which implement all of those methods, and the corresponding method set consists exactly of the methods specified by the interface. Interfaces whose type sets can be defined entirely by a list of methods are called basic interfaces.

// A simple File interface.
interface {
	Read([]byte) (int, error)
	Write([]byte) (int, error)
	Close() error
}

So basic interfaces are just a list of methods. And as mentioned before, any type that implements all of those methods, satisfies the interface.

But perhaps the most important part of the above text is just mentioned in passing: The list of methods in an interface may be empty.

interface {}

is a perfectly valid interface. And as of Go 1.18, it has an alias: any.

The empty interface, as it’s called, can serve many purposes. It can act as a placeholder for any other value, since, logically, every value of any type has at least zero methods on it.

Newcomers to Go often abuse the empty interface, however. As the proverb says, “interface{} says nothing”.

Before using the empty interface, consider: Can you use some other type to more clearly express the intent of the code? This, of course, is more art than science, and takes practice.

Quotes from The Go Programming Language Specification Version of December 15, 2022

Share this