Make Zero Values Useful Part 1: Ready-to-Use Types
Nol qiymatni foydali qiling 1-qism: darhol tayyor turlar
Go'da e'lon qilingan, lekin qiymat berilmagan o'zgaruvchi "nol qiymat"ga ega bo'ladi (0, "", nil...). Yaxshi loyihalangan turlar shu nol qiymatning o'zida ham darhol ishlatishga tayyor bo'ladi — maxsus "konstruktor" chaqirish shart emas.
package main
import (
"bytes"
"fmt"
"sync"
)
type SafeCounter struct {
mu sync.Mutex
count int
}
func (c *SafeCounter) Inc() {
c.mu.Lock()
defer c.mu.Unlock()
c.count++
}
func main() {
var c SafeCounter // hech qanday "New" chaqirilmadi!
c.Inc()
c.Inc()
fmt.Println(c.count)
var buf bytes.Buffer // bu ham darhol tayyor
buf.WriteString("tayyor")
fmt.Println(buf.String())
}sync.Mutex va bytes.Buffer — Go standart kutubxonasidagi "nol qiymati foydali" turlarga klassik misollar: ularni var x Mutex deb e'lon qilishning o'zi yetarli, NewMutex() degan funksiya umuman yo'q. Bu — Go'ning muhim dizayn falsafasi: agar iloji bo'lsa, foydalanuvchidan konstruktor chaqirishni talab qilmang.
>_ Exercise
Nol qiymati bilan darhol ishlaydigan Tally turini yozing.
- •Tally struct'i (bitta int maydon, Total) yarating
- •Add(n int) metodi Total'ga qo'shsin
- •var t Tally bilan (konstruktorsiz) ishlatib, ikkita Add chaqiring va Total'ni chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Imkon qadar, struct'laringizni nol qiymatining o'zi darhol ishlatishga tayyor bo'ladigan qilib loyihalang — bu API'ni soddalashtiradi.
NEXT UP
Make Zero Values Useful Part 2: Lazy Initialization
$ go run main.go
Kodingizni ishga tushiring