مرکزی مواد پر جائیں
ماڈیول 10 · سبق 1 از 5کورس میں 46/50~10 min
ماڈیول اسباق (1/5)

نام دینے کی روایت اور انداز

Go کے پاس مضبوط اور غیر گفت و شنید نام اور اسٹائل کنونشنز ہیں: آفیشل فارمیٹر gofmt (اور اس کا سپر سیٹ goimports) انڈینٹیشن، اسپیسنگ اور امپورٹ آرڈر کا فیصلہ کرتا ہے۔ بحث کرنے کا انداز موضوع سے ہٹ کر سمجھا جاتا ہے: آپ gofmt -w چلاتے ہیں اور آگے بڑھتے ہیں۔ یہ مزید دلچسپ مسائل کے لیے توانائی کو آزاد کرتا ہے۔

مرئیت: بڑے یا چھوٹے

کوئی public/private کلیدی الفاظ نہیں ہیں۔ نام کا پہلا حرف مرئیت کا تعین کرتا ہے:

  • بڑے کیس → پیکیج سے باہر برآمد کیا گیا (User, Login, MaxRetries)۔
  • لوئر کیس → پیکیج کے لیے نجی (user, parseLine, defaultTimeout)۔

یہ اس پر لاگو ہوتا ہے: اقسام، افعال، طریقے، متغیرات، مستقل، ساختی فیلڈز۔

Go
type User struct {
    Name  string  // exported
    email string  // private to the package
}

ایک "نجی" ڈھانچہ فیلڈ کو ** encoding/json کے ذریعہ سیریلائز نہیں کیا گیا ہے (ماڈیول 8 دیکھیں)، اور یہ pkg_test میں ٹیسٹوں سے قابل رسائی نہیں ہے۔

اونٹ کیس، کبھی سانپ_کیس نہیں۔

کثیر الفاظ کے ناموں میں کوئی انڈر سکور نہیں:

  • ✅ HTTPClient, userName, parseRequest
  • ❌ Http_Client, user_name, parse_request

** مخففات تمام بڑے حروف میں ہوتے ہیں** (یا تمام چھوٹے، اگر نجی دائرہ کار میں ہیں):

  • ✅ URL, ID, HTML, JSON, parseURL, userID
  • ❌ Url, Id, Html, Json, parseUrl, userId
Go
type APIResponse struct {
    UserID  int
    HTMLURL string
}

مختصر دائرہ کار کے لیے مختصر نام

تنگ دائرہ کار میں مساوی وضاحت کے ساتھ اختصار کی حمایت کریں:

Go
// idiomatic
for i, v := range items { ... }
for k, v := range m { ... }

if err := f(); err != nil { ... }

func (s *Server) Serve(w http.ResponseWriter, r *http.Request) { ... }

قائم کردہ کنونشنز:

  • i, j, k لوپ انڈیکس کے لیے۔
  • v اقدار کے لیے، k کلیدوں کے لیے۔
  • r برائے *Request/io.Reader، w برائے Writer/ResponseWriter۔
  • err غلطیوں کے لیے۔
  • ctx برائے context.Context۔
  • میتھڈ ریسیورز: پوری قسم میں 1–2 مستقل حروف (s *Server, u *User)۔ کبھی نہیں this یا self۔

دائرہ کار جتنا وسیع ہوگا، نام کا اتنا ہی وضاحتی ہونا ضروری ہے: ایک مقامی count ٹھیک ہے، لیکن برآمد شدہ Count متغیر آپ کو بتائے گا کہ اس کا کیا شمار ہوتا ہے۔

انٹرفیس پر کوئی "I" سابقہ ​​نہیں، کوئی "Impl" لاحقہ نہیں۔

Go
// idiomatic
type Reader interface { ... }
type fileReader struct { ... } // concrete implementation

// not idiomatic
type IReader interface { ... }
type ReaderImpl struct { ... }

چھوٹے انٹرفیس اکثر -er لاحقہ لیتے ہیں: Reader, Writer, Stringer, Closer۔ یہ اس حقیقت کی باز گشت ہے کہ وہ ایک رویے (ایک واحد طریقہ، مثالی طور پر) کی وضاحت کرتے ہیں۔

پیکیج کے نام

ایک پیکیج میں ایک ہی نام، مختصر، تمام چھوٹے، کوئی انڈر سکور نہیں ہیں:

  • ✅ bytes, http, os, userauth
  • ❌ userAuth, user_auth, UserAuth

پیکیج کا نام اس کی علامتوں کا استعمال کا سابقہ ہے: bytes.Buffer, http.Client۔ لہذا user.User بے کار ہے: بہتر ہے کہ قسم (user.Account) یا پیکج کا نام تبدیل کیا جائے۔

gofmt بحث کے لیے تیار نہیں ہے۔

gofmt نافذ کرتا ہے:

  • ٹیبز کے ساتھ انڈینٹیشن (خالی جگہ نہیں)۔
  • دستخط کے طور پر اسی لائن پر تسمہ {۔
  • ایک خالی لائن سے الگ گروپوں میں درآمدات؛ goimports گمشدہ درآمدات کو بھی شامل کرتا ہے۔
  • آپریٹرز کے ارد گرد خالی جگہیں۔

ارتکاب کرنے سے پہلے ہمیشہ دوڑیں:

Bash
go fmt ./...
goimports -w .
go vet ./...

لنٹر (staticcheck, golangci-lint) اضافی قواعد شامل کرتے ہیں (غیر استعمال شدہ متغیرات، سایہ کرنا، بیکار موازنہ، ...)۔

مشقیں

ورزش#go.m10.l1.e1
کوششیں: 0لوڈ ہو رہا ہے…

Rinomina la struct Http_Client in HTTPClient (e il campo Url in URL) seguendo le convenzioni Go sugli acronimi.

ایڈیٹر لوڈ ہو رہا ہے…

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#go.m10.l1.e2
کوششیں: 0لوڈ ہو رہا ہے…

Inverti la visibilità: rendi Username esportato (maiuscolo) e پاس ورڈ privato (minuscolo)۔

ایڈیٹر لوڈ ہو رہا ہے…

3 کوششوں کے بعد حل دستیاب ہے۔

Quiz#go.m10.l1.e3
تیار

Quale di questi nomi è idiomatico in Go per un tipo esportato 'server HTTP'؟

Go
type ??? struct {}
جواب کے اختیارات