bool
. का मान प्रकार के 2 संभावित मान हैं:false
और true
. और आप 3 अलग-अलग राज्यों को bool
. के साथ "संचार" करना चाहते हैं फ़ील्ड, अर्थात् फ़ील्ड को अपडेट नहीं करने के लिए, फ़ील्ड को false
. पर सेट करने के लिए और फ़ील्ड को true
. पर सेट करने के लिए . यह स्पष्ट रूप से संभव नहीं है।
वही बात int
. के लिए जाती है मान:0
. का मान 2 अलग-अलग विकल्पों का प्रतिनिधित्व नहीं कर सकता, अर्थात् फ़ील्ड को अपडेट नहीं करना और इसे 0
. पर सेट करना ।
अगर आप omitempty
रखना चाहते हैं टैग मानों में विकल्प, फिर इसे काम करने के लिए, आपको फ़ील्ड को पॉइंटर्स में बदलना होगा:
type Coupon struct {
Id *int `json:"id,omitempty" bson:"_id,omitempty"`
Name string `json:"name,omitempty" bson:"name,omitempty"`
Code string `json:"code,omitempty" bson:"code,omitempty"`
Description string `json:"description,omitempty" bson:"description,omitempty"`
Status *bool `json:"status" bson:"status"`
MaxUsageLimit *int `json:"max_usage_limit,omitempty" bson:"max_usage_limit,omitempty"`
SingleUsePerUser *bool `json:"single_use_per_user,omitempty" bson:"single_use_per_user,omitempty"`
}
जिस तरह से यह काम करता है वह यह है कि यदि सूचक nil
. है , इसे छोड़ दिया जाएगा (यह "omitempty" . है विकल्प)। यदि फ़ील्ड एक गैर-nil
है पॉइंटर, इसे पॉइंटेड वैल्यू पर अपडेट किया जाएगा।
तो उदाहरण के लिए यदि आप एक bool
. को बाहर करना चाहते हैं फ़ील्ड, फिर *bool
मान nil
होना चाहिए/होना चाहिए . अगर आप इसे false
. पर सेट/अपडेट करना चाहते हैं तो , यह एक false
. का सूचक होना चाहिए मूल्य। अगर आप इसे true
. पर सेट/अपडेट करना चाहते हैं तो , यह एक true
. का सूचक होना चाहिए मूल्य।
सामान्य तौर पर, कोई भी प्रकार जिसका शून्य मान
है संभव है और इसके साथ गिना जाना चाहिए, आप केवल "यह शून्य मान है" और "यह इनपुट से गायब है" को संभाल सकते हैं यदि आप इसे एक सूचक बनाते हैं, और nil
सूचक का मान "इनपुट से गायब" मामले को इंगित करेगा, जबकि एक गैर-nil
शून्य मान का सूचक "यह शून्य मान है" मामले को दर्शाता है। तो उपरोक्त उदाहरण में यदि string
फ़ील्ड खाली स्ट्रिंग मान भी ले सकते हैं (""
), तो आपको उन्हें पॉइंटर्स भी बनाने होंगे।
ध्यान दें कि आप इसे कस्टम मार्शलिंग और अनमर्शलिंग लॉजिक का उपयोग करके भी प्राप्त कर सकते हैं, लेकिन यह अधिक बोझिल है, और पॉइंटर्स का उपयोग करने से आपको यह स्वचालित रूप से मिल जाता है।