এখানে আরও 3 টি পরামর্শ বা কৌশল রয়েছে:
একটি অতিরিক্ত ক্ষেত্র সহ
স্ট্রাক্টটি জনবহুল হয়েছে কি না তা খালি কিনা তা জানানোর জন্য আপনি একটি অতিরিক্ত ক্ষেত্র যুক্ত করতে পারেন। আমি ইচ্ছাকৃতভাবে এটির নামকরণ করেছি readyনা emptyকারণ একটি এর শূন্য মান boolহল false, তাই আপনি যদি Session{}এর readyক্ষেত্রের মতো একটি নতুন কাঠামো তৈরি করেন তবে falseএটি স্বয়ংক্রিয়ভাবে আসবে এবং এটি আপনাকে সত্যটি বলে দেবে: যে কাঠামোটি এখনও প্রস্তুত নয় (এটি খালি)।
type Session struct {
ready bool
playerId string
beehive string
timestamp time.Time
}
আপনি যখন কাঠামোটি আরম্ভ করবেন তখন আপনাকে সেট readyকরতে হবে true। আপনার isEmpty()পদ্ধতির আর প্রয়োজন নেই (যদিও আপনি চাইলে একটি তৈরি করতে পারেন) কারণ আপনি কেবল readyক্ষেত্রটি নিজেই পরীক্ষা করতে পারেন ।
var s Session
if !s.ready {
// do stuff (populate s)
}
boolকাঠামো বড় হওয়ার সাথে সাথে এটিতে ক্ষেত্রগুলি তুলনীয় নয় (উদাহরণস্বরূপ স্লাইস mapএবং ফাংশন মান) এর সাথে এটির অতিরিক্ত ক্ষেত্রের তাত্পর্য বৃদ্ধি পায় ।
একটি বিদ্যমান ক্ষেত্রের জিরো মান ব্যবহার করে
এটি পূর্ববর্তী পরামর্শের মতো, তবে এটি বিদ্যমান ক্ষেত্রের শূন্য মান ব্যবহার করে যা বিবেচিত হয় স্ট্রাকটি খালি না হলে অবৈধ হয়। এর ব্যবহার বাস্তবায়ন নির্ভর।
উদাহরণস্বরূপ যদি আপনার উদাহরণে আপনার playerIdখালি হতে পারে নাstring "" , আপনি এটির জন্য এটি ব্যবহার করতে পারেন যদি আপনার স্ট্রাক্টটি থাকে:
var s Session
if s.playerId == "" {
// do stuff (populate s, give proper value to playerId)
}
এই ক্ষেত্রে এটিতে এই চেকটি অন্তর্ভুক্ত করা উচিত isEmpty() পদ্ধতিতে কারণ এই চেকটি বাস্তবায়ন নির্ভর করে:
func (s Session) isEmpty() bool {
return s.playerId == ""
}
এবং এটি ব্যবহার:
if s.isEmpty() {
// do stuff (populate s, give proper value to playerId)
}
আপনার কাঠামোতে পয়েন্টার ব্যবহার করুন
দ্বিতীয় প্রস্তাব আপনার struct একটি পয়েন্টার ব্যবহার করতে হয়: *Session। পয়েন্টারগুলির nilমান থাকতে পারে , সুতরাং আপনি এটির জন্য পরীক্ষা করতে পারেন:
var s *Session
if s == nil {
s = new(Session)
// do stuff (populate s)
}