package main

import "fmt"

type Logger struct {
	Awalan string
}

func (l *Logger) Catat(pesan string) {
	fmt.Println("[" + l.Awalan + "] " + pesan)
}

type Pencatat interface {
	Catat(pesan string)
}

type Pengolah struct {
	*Logger
	Nama string
}

func (p *Pengolah) Proses(berkas string) {
	p.Catat("mulai memproses " + berkas)
	p.Catat("selesai memproses " + berkas)
}

func main() {
	logger := &Logger{Awalan: "utama"}

	a := &Pengolah{Logger: logger, Nama: "pengolah-A"}
	b := &Pengolah{Logger: logger, Nama: "pengolah-B"}

	a.Proses("laporan.csv")
	b.Proses("foto.png")

	var pencatat Pencatat = a
	pencatat.Catat("dipanggil lewat interface")
}
