From 269c709c612d4b1b342964511127d4a63b5883ea Mon Sep 17 00:00:00 2001 From: Luong Vo Date: Mon, 3 Aug 2020 19:33:43 +0700 Subject: [PATCH] go: Add documentation for golang interfaces (#1332) * Add documentation for golang interfaces * Update go.md Co-authored-by: Rico Sta. Cruz --- go.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) 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