GoDasturchi
Avoid Package Stutter

Avoid Package Stutter

Paket takrorlanishidan saqlaning

"Package Naming" darsida qisqacha ko'rgan "stutter" (takrorlanish) muammosini endi amaliy misolda mustahkamlaymiz: paket nomini ichidagi tur, funksiya yoki konstanta nomlarida takrorlamang.

example.go
package main

import "fmt"

// Xayoliy "payment" paketi ichida bo'lganda:
// payment.PaymentGateway  — YOMON (takrorlanish: "payment" ikki marta)
// payment.Gateway         — YAXSHI

// payment.NewPaymentGateway() — YOMON
// payment.NewGateway()        — YAXSHI

type Gateway struct {
	Provider string
}

func NewGateway(provider string) Gateway {
	return Gateway{Provider: provider}
}

func main() {
	g := NewGateway("Stripe")
	fmt.Println(g.Provider)
}

Chaqiruv joyida qanday ko'rinishini tasavvur qiling: payment.NewGateway("Stripe") — tabiiy o'qiladi. payment.NewPaymentGateway("Stripe") esa "payment" so'zini ikki marta takrorlaydi, chunki paket nomi allaqachon import qilingan joyda ko'rinib turibdi. Bu qoida funksiya, konstanta va o'zgaruvchi nomlariga ham tegishli — barchasi paket nomini emas, paket nomidan keyingi qismni aytishi kerak.

>_ Exercise

Takrorlanishni bartaraf eting (xayoliy "user" paketi ichida).

  • UserAccount struct'ini Account deb qayta nomlang
  • NewUserAccount funksiyasini NewAccount deb qayta nomlang
  • Account'ni yaratib, uning Email maydonini chop eting

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Paket ichidagi nomlar paket nomini takrorlamasligi kerak — chaqiruv joyida (paket.Nom) paket nomi allaqachon mavjud.

NEXT UP

Use internal/ for Private Code

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Avoid Package Stutter

Paket takrorlanishidan saqlaning

"Package Naming" darsida qisqacha ko'rgan "stutter" (takrorlanish) muammosini endi amaliy misolda mustahkamlaymiz: paket nomini ichidagi tur, funksiya yoki konstanta nomlarida takrorlamang.

example.go
package main

import "fmt"

// Xayoliy "payment" paketi ichida bo'lganda:
// payment.PaymentGateway  — YOMON (takrorlanish: "payment" ikki marta)
// payment.Gateway         — YAXSHI

// payment.NewPaymentGateway() — YOMON
// payment.NewGateway()        — YAXSHI

type Gateway struct {
	Provider string
}

func NewGateway(provider string) Gateway {
	return Gateway{Provider: provider}
}

func main() {
	g := NewGateway("Stripe")
	fmt.Println(g.Provider)
}

Chaqiruv joyida qanday ko'rinishini tasavvur qiling: payment.NewGateway("Stripe") — tabiiy o'qiladi. payment.NewPaymentGateway("Stripe") esa "payment" so'zini ikki marta takrorlaydi, chunki paket nomi allaqachon import qilingan joyda ko'rinib turibdi. Bu qoida funksiya, konstanta va o'zgaruvchi nomlariga ham tegishli — barchasi paket nomini emas, paket nomidan keyingi qismni aytishi kerak.

>_ Exercise

Takrorlanishni bartaraf eting (xayoliy "user" paketi ichida).

  • UserAccount struct'ini Account deb qayta nomlang
  • NewUserAccount funksiyasini NewAccount deb qayta nomlang
  • Account'ni yaratib, uning Email maydonini chop eting

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Paket ichidagi nomlar paket nomini takrorlamasligi kerak — chaqiruv joyida (paket.Nom) paket nomi allaqachon mavjud.

NEXT UP

Use internal/ for Private Code