GoDasturchi
Constructor Functions (NewXxx)

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.

example.go
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.

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

example.go
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.

Hints (0/3)

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