@ চাচারিত যেমন একটি মন্তব্যে উল্লেখ করেছেন, আপনি json.Marshaler
এটি MyStruct
প্রয়োগ করে প্রতিটি স্ট্রাক্টে একটি কাস্টম জেএসওএন মার্শালিং ফাংশন প্রয়োগ করে আরও কাজ করতে পারেন can এটি অতিরিক্ত ব্যবহারের পক্ষে মূল্যবান কিনা বা আপনি আপনার JSON এ খালি স্ট্রাক্ট নিয়ে বেঁচে থাকার জন্য প্রস্তুত কিনা তা সত্যই আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে তবে আমি যে প্যাটার্নটি ব্যবহার করি তা এখানে প্রয়োগ করা হয়েছে Result
:
type Result struct {
Data MyStruct
Status string
Reason string
}
func (r Result) MarshalJSON() ([]byte, error) {
return json.Marshal(struct {
Data *MyStruct `json:"data,omitempty"`
Status string `json:"status,omitempty"`
Reason string `json:"reason,omitempty"`
}{
Data: &r.Data,
Status: r.Status,
Reason: r.Reason,
})
}
func (r *Result) UnmarshalJSON(b []byte) error {
decoded := new(struct {
Data *MyStruct `json:"data,omitempty"`
Status string `json:"status,omitempty"`
Reason string `json:"reason,omitempty"`
})
err := json.Unmarshal(b, decoded)
if err == nil {
r.Data = decoded.Data
r.Status = decoded.Status
r.Reason = decoded.Reason
}
return err
}
আপনার যদি অনেক ক্ষেত্রের সাথে বিশাল স্ট্রাক্ট থাকে তবে এটি ক্লান্তিকর হয়ে উঠতে পারে, বিশেষত পরে কোনও কাঠামোর বাস্তবায়ন পরিবর্তন করতে পারে, তবে json
আপনার প্রয়োজন অনুসারে পুরো প্যাকেজটি পুনরায় লেখার সংক্ষিপ্ততা (ভাল ধারণা নয়), এটি আমি পেতে ভাবতে পারি এমন একমাত্র উপায় এটি এখনও কোনও পয়েন্টার না রেখেই করা হয়েছেMyStruct
সেখানে হয়েছে।
এছাড়াও, আপনাকে ইনলাইন স্ট্রাইক ব্যবহার করতে হবে না, আপনি নামযুক্ত তৈরি করতে পারেন। আমি কোড সমাপ্তির সাথে লাইটইড ব্যবহার করি, তাই বিশৃঙ্খলা এড়াতে আমি ইনলাইন পছন্দ করি।