Merhaba ilk bulabilidigm hata bu fonksiyon float64 donecek demissiniz ama float64 slice'i return etmissiniz
func CalculateRateCalcutator(RateMoneys []CredictCalculator) float64 {
var paymentTotal []float64
for i := 0; i < len(RateMoneys); i++ {
paymentTotal[i] = RateMoneys[i].Calculate()
}
return paymentTotal
}
buradaki hata ise total[i] := CalculateRateCalcutator(RateMoneys[i])
methodu []CredictCalculator
tipinde veri istiyor ama siz CredictCalculator
tipinde veri ile cagiriyorsunuz
func Demo3() {
RateMoney1 := carfinancecredict{carfinancecredict: 100000, rate: 5}
RateMoney2 := homefinancecredict{homefinancecredict: 150000, rate: 3}
RateMoney3 := personalfinancecredict{personalfinancecredict: 15000, rate: 7}
RateMoneys := []CredictCalculator{RateMoney1, RateMoney2, RateMoney3}
for i := 0; i < len(RateMoneys); i++ {
var total []float64
total[i] := CalculateRateCalcutator(RateMoneys[i])
fmt.Println(i+1, ".", "Ödeyeceğiniz Toplam Kredi Tutatrı : ", total[i])
}
}
edit: simdi farkettim ayni tip objeler icin farkli struct kullanmissin DIY prensiplerine aykiri. struct'i diger dillerdeki class lar gibi dusunebilirsin. Her kredi icin farkli struct olusturmak yerine tek structla butun kredi objelerini olusturmalisin. interface leride abstraction amacli kullanmalisin.
butun kredi turleri icin tek bir struct yapisi yerterli burada
package main
import "fmt"
var usuryrate float64
type ICreditCalculator interface {
Calculate() float64
}
type creditCalculator struct {
rate float64
amount float64
}
ICreditCalculator
interfacini implemente ettim. burda dikkat etmen gereken, receiver olarak pointer (*) verdim bu sekilde instance methodu o objeyi referans alacak
func (c *creditCalculator) Calculate() float64 {
return c.rate / 100 * c.amount
}
constructor olarak rate ve amount degerlerini alip calculator objesini donuyor.
func NewCalculator(rate float64, amount float64) ICreditCalculator {
return &creditCalculator{
rate: rate,
amount: amount,
}
}
func main() {
// calculatorlarimi olusturdum
carCredit := NewCalculator(150000, 15)
homeCredit := NewCalculator(20000, 12)
personalCredit := NewCalculator(7000, 8)
fmt.Printf("Car: %.2f\nHome: %.2f\nPersonal: %.2f\n",
carCredit.Calculate(),
homeCredit.Calculate(),
personalCredit.Calculate())
}
Konsol ciktisida su sekilde

bonus: hepsini for dongusu ile yazdirma
func main() {
rates := map[string]ICreditCalculator{
"carCredit": NewCalculator(150000, 15),
"homeCredit": NewCalculator(150000, 15),
"personalCredit": NewCalculator(7000, 8),
}
for index, credit := range rates {
fmt.Printf("credit: %s, calculated: %.2f\n", index, credit.Calculate())
}
}
bunun ciktisida su sekilde

edit 3: go da nekadar yenisin bilmiyorum seni kesmeyebilir ama kendim ogrenmeye calisirken bi tutorial yapmistim belki isine yarar degisken tanimlamadan go routinelere ordan mutexe kadar hemen hemen hepsi icin basit ornekler var https://github.com/KerimCETINBAS/golang github profilimdede bircok ornek var inceleyebilirsin