Interfaces let you define a set of actions that different things can do. This helps you write flexible and reusable code.
Implementing interfaces in Go
type InterfaceName interface { MethodName1(paramType) returnType MethodName2(paramType) returnType } // To implement the interface, a type must have all methods with matching signatures func (t TypeName) MethodName1(paramType) returnType { // method body } func (t TypeName) MethodName2(paramType) returnType { // method body }
In Go, you don't explicitly say a type implements an interface. It happens automatically if the type has all the methods.
Interfaces describe behavior, not data.
Speaker with one method Speak. The type Dog implements it by defining Speak.type Speaker interface { Speak() string } type Dog struct {} func (d Dog) Speak() string { return "Woof!" }
type Reader interface { Read(p []byte) (n int, err error) } // Any type with Read method matching this signature implements Reader interface.
This program defines an interface Greeter with one method Greet. The type Person implements it. The function sayHello accepts any Greeter and calls Greet. In main, we create a Person and pass it to sayHello.
package main import "fmt" // Define an interface type Greeter interface { Greet() string } // Define a type that implements Greeter type Person struct { name string } func (p Person) Greet() string { return "Hello, my name is " + p.name } // Function that accepts any Greeter func sayHello(g Greeter) { fmt.Println(g.Greet()) } func main() { p := Person{name: "Alice"} sayHello(p) }
You don't need to write extra code to say a type implements an interface; Go figures it out automatically.
If a type misses even one method from the interface, it does not implement it.
Interfaces help you write code that works with many types, making your programs more flexible.
Interfaces define a set of methods that types can implement.
Types implement interfaces by having all the required methods.
This allows writing flexible and reusable code that works with different types.