মূল কন্টেন্টে যান
মডিউল 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
  • context.Context এর জন্য ctx।
  • পদ্ধতি রিসিভার: সমগ্র ধরন জুড়ে 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লোড হচ্ছে...

ইনভার্টি লা ভিসিবিলিটি: রেন্ডি ইউজারনেম esportato (maiuscolo) এবং পাসওয়ার্ড প্রাইভেটো (মাইনসকোলো)।

সম্পাদক লোড হচ্ছে...

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

Quiz#go.m10.l1.e3
প্রস্তুত

'সার্ভার এইচটিটিপি'-এর জন্য গো-প্রচারের জন্য কোন প্রশ্ন আছে?

Go
type ??? struct {}
উত্তরের বিকল্প