Interfaces

Duration: 20 min  •  Difficulty: Hard

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 main
import (
"fmt"
"math"
)
// Kontrak: Siapapun yang punya area() adalah Geometry
type Geometry interface {
area() float64
}
type Square struct {
sisi float64
}
type Circle struct {
radius float64
}
// Square mengikuti kontrak
func (s Square) area() float64 {
return s.sisi * s.sisi
}
// Circle mengikuti kontrak
func (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)
}