Interface adalah kontrak. Ia mendefinisikan "apa yang bisa dilakukan" oleh suatu benda, tanpa peduli "benda apa itu".
Concept
Jika sebuah Struct memiliki method yang diminta oleh Interface, maka Struct tersebut dianggap mengimplementasikan Interface tersebut secara otomatis (Implicit Implementation).
Example Case
Kita punya interface Geometry yang mengharuskan punya method area().
Baik Square maupun Circle punya rumus luas berbeda, tapi keduanya punya method area(). Maka keduanya adalah Geometry.
MAIN.GO
package mainimport ( "fmt" "math")// Kontrak: Siapapun yang punya area() adalah Geometrytype Geometry interface { area() float64}type Square struct { sisi float64}type Circle struct { radius float64}// Square mengikuti kontrakfunc (s Square) area() float64 { return s.sisi * s.sisi}// Circle mengikuti kontrakfunc (c Circle) area() float64 { return math.Pi * c.radius * c.radius}// Fungsi ini menerima Geometry (bisa Square, bisa Circle)func printArea(g Geometry) { fmt.Println("Luas:", g.area())}func main() { kotak := Square{sisi: 5} lingkaran := Circle{radius: 7} // Polymorphism: Satu fungsi bisa menerima tipe berbeda printArea(kotak) printArea(lingkaran)}