Constructor Functions (NewXxx)
Konstruktor funksiyalar (NewXxx)
Go'da klasslar yo'q, shuning uchun boshqa tillardagi kabi maxsus "constructor" sintaksisi ham yo'q. Buning o'rniga, Go dasturchilari odat orqali bir naqshni qabul qilishgan: agar struct'ni yaratishda biror tayyorgarlik kerak bo'lsa (standart qiymat berish, tekshirish, ichki maydonni ishga tushirish), buning uchun New bilan boshlanuvchi oddiy funksiya yoziladi.
Bu — restoran menyusidagi "kombinatsiya" taomiga o'xshaydi: mijoz har bir ingredientni alohida-alohida tanlash o'rniga, tayyor, to'g'ri yig'ilgan taomni buyurtma qiladi. NewClient(...) chaqirilganda, foydalanuvchi struct'ning ichki tuzilishini bilishi shart emas — u faqat kerakli narsalarni beradi, qolganini konstruktor hal qiladi.
package main
import "fmt"
type Client struct {
baseURL string
timeout int
}
func NewClient(baseURL string) *Client {
return &Client{baseURL: baseURL, timeout: 10} // standart timeout o'rnatiladi
}
func main() {
c := NewClient("https://api.example.com")
fmt.Println(c.baseURL, c.timeout)
}baseURL va timeout maydonlari kichik harf bilan boshlanadi — ya'ni ular eksport qilinmagan ("Naming Conventions" darsini eslang). Bu ataylab qilingan: tashqi kod Client{baseURL: "..."} deb to'g'ridan-to'g'ri yaratolmaydi, faqat NewClient(...) orqali yaratishi majbur. Shu tarzda, agar kelajakda konstruktor ichiga tekshirish yoki qo'shimcha tayyorgarlik qo'shilsa, uni chetlab o'tib bo'lmaydi.
Bu naqsh ayniqsa xato qaytarishi mumkin bo'lgan yaratishda foydali: func NewClient(url string) (*Client, error) — agar url noto'g'ri formatda bo'lsa, konstruktorning o'zi buni darhol aniqlab, foydalanuvchiga aytib beradi, undan keyingi kodga noto'g'ri holatdagi obyekt o'tib ketmaydi.
>_ Exercise
Xatoni tekshiradigan konstruktor yozing.
- •Account struct'i (balance int, eksport qilinmagan) yasang
- •NewAccount(initial int) (*Account, error) yozing: initial < 0 bo'lsa xato qaytaring
- •Balance() int metodini qo'shing (balance'ni o'qish uchun)
- •NewAccount(100) va NewAccount(-5) ni chaqirib, natijalarni chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
NewXxx konstruktor funksiyalari — Go'da struct yaratishni nazorat qilish, standart qiymat berish va yaratish vaqtida xatoni tekshirishning odatiy usuli.
NEXT UP
Interface-Based Design
$ go run main.go
Kodingizni ishga tushiring