package main

import "fmt"

type Kalkulator struct {
	Total int
}

func (k Kalkulator) Nilai() int {
	return k.Total
}

func (k *Kalkulator) Tambah(n int) {
	k.Total += n
}

type Pembaca interface {
	Nilai() int
}

type Pengubah interface {
	Tambah(n int)
}

func main() {
	k := Kalkulator{}
	k.Tambah(7)
	fmt.Println("setelah Tambah:", k.Nilai())

	p := &k
	var pembacaDariNilai Pembaca = k
	var pembacaDariPointer Pembaca = p
	var pengubah Pengubah = p

	pengubah.Tambah(3)
	fmt.Println("pembacaDariNilai:", pembacaDariNilai.Nilai())
	fmt.Println("pembacaDariPointer:", pembacaDariPointer.Nilai())
}
