diff --git a/go.md b/go.md index fdc212350..ed3d480ae 100644 --- a/go.md +++ b/go.md @@ -581,6 +581,50 @@ By defining your receiver as a pointer (`*Vertex`), you can do mutations. See: [Pointer receivers](https://tour.golang.org/methods/4) +## Interfaces + +### A basic interface + +```go +type Shape interface { + Area() float64 + Perimeter() float64 +} +``` + +### Struct + +```go +type Rectangle struct { + Length, Width float64 +} +``` + +Struct `Rectangle` implicitly implements interface `Shape` by implementing all of its methods. + +### Methods + +```go +func (r Rectangle) Area() float64 { + return r.Length * r.Width +} + +func (r Rectangle) Perimeter() float64 { + return 2 * (r.Length + r.Width) +} +``` + +The methods defined in `Shape` are implemented in `Rectangle`. + +### Interface example + +```go +func main() { + var r Shape = Rectangle{Length: 3, Width: 4} + fmt.Printf("Type of r: %T, Area: %v, Perimeter: %v.", r, r.Area(), r.Perimeter()) +} +``` + ## References ### Official resources