Sepeti yazdırma
- Go kursu
- Başlangıç
- Ders 50/90
- 6 dk
fmt.Printf ile sepeti biçimlendirip yazdırırsın.
Sepeti yazdırma
Sepeti okunur bir tablo olarak yazdırmak için Printf genişlik ve hassasiyet alanları kullanılır:
for _, u := range s.Urunler {
fmt.Printf("%-8s %3d x %6.2f = %7.2f\n", u.Ad, u.Adet, u.Fiyat, u.AraToplam())
}
fmt.Printf("%-8s %22.2f\n", "TOPLAM", s.Toplam())%-8s adı 8 karakterde sola yaslar, %6.2f sayıyı 6 karakterde 2 ondalıkla yazar.
Stringer ile sepet
Sepete String() string yöntemi eklenirse fmt.Println(s) sepeti kendi biçiminde yazar. Metni parça parça kurmak için strings.Builder ve fmt.Fprintf birlikte kullanılır:
func (s Sepet) String() string {
var b strings.Builder
for _, u := range s.Urunler {
fmt.Fprintf(&b, "%s x%d\n", u.Ad, u.Adet)
}
return b.String()
}Uygulama Sepet fişi
Urun (ve AraToplam) ile iki ürünü fmt.Printf("%-8s %2d x %5.2f = %6.2f\n", ...) biçiminde yazdır: Kalem 12.5 × 2 ve Defter 20 × 1.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
type Urun struct {
Ad string
Fiyat float64
Adet int
}
func (u Urun) AraToplam() float64 { return u.Fiyat * float64(u.Adet) }
func main() {
for _, u := range []Urun{{"Kalem", 12.5, 2}, {"Defter", 20, 1}} {
fmt.Printf("%-8s %2d x %5.2f = %6.2f\n", u.Ad, u.Adet, u.Fiyat, u.AraToplam())
}
}Beklenen çıktı
Kalem 2 x 12.50 = 25.00 Defter 1 x 20.00 = 20.00
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>fmt.Printf("%6.2f", 7.5)</code> çıktısı nedir?
- "000007.50"
- " 7.50" Doğru cevap
- "7.50"
- "7.5 "
Açıklama: Genişlik 6, iki ondalık: "7.50" 4 karakter olduğu için başa 2 boşluk eklenir.
2 Sola yasla
fmt.Printf("____|
", "Kalem") // "Kalem |"
fmt.Printf("%-8s|
", "Kalem") // "Kalem |"
Açıklama: %-8s metni 8 karakterlik alanda sola yaslar.
3 Biçim ve etkisi
| Kavram | Anlamı |
|---|---|
%-8s |
Sola yaslı metin |
%3d |
3 haneli sayı |
%6.2f |
2 ondalıklı, 6 genişlik |
String() |
Println biçimi |