আমি একটি এপিআই ক্লায়েন্ট বিকাশ করছি যেখানে আমাকে অনুরোধে একটি জেএসএন পেডলড এনকোড করতে হবে এবং প্রতিক্রিয়া থেকে একটি জেএসএন বডি ডিকোড করতে হবে।
আমি বেশ কয়েকটি লাইব্রেরি থেকে উত্স কোডটি পড়েছি এবং যা দেখেছি তা থেকে আমার কাছে জেএসএন স্ট্রিংটিকে এনকোডিং এবং ডিকোড করার জন্য মূলত দুটি সম্ভাবনা রয়েছে।
json.Unmarshal
সম্পূর্ণ প্রতিক্রিয়া স্ট্রিং উত্তরণ ব্যবহার করুন
data, err := ioutil.ReadAll(resp.Body)
if err == nil && data != nil {
err = json.Unmarshal(data, value)
}
বা ব্যবহার json.NewDecoder.Decode
err = json.NewDecoder(resp.Body).Decode(value)
আমার ক্ষেত্রে, এইচটিটিপি প্রতিক্রিয়াগুলি কার্যকর করে যখন কাজ করে io.Reader
, দ্বিতীয় সংস্করণটির জন্য কম কোডের প্রয়োজন বলে মনে হয়, তবে যেহেতু আমি দুজনকেই দেখেছি যে আমি অন্যটির চেয়েও সমাধান ব্যবহার করব কিনা তার কোনও পছন্দ আছে কিনা তা আমি ভাবছি।
তদুপরি, এই প্রশ্ন থেকে গৃহীত উত্তর বলে
json.Decoder
পরিবর্তে ব্যবহার করুনjson.Unmarshal
।
তবে এর কারণ উল্লেখ করা হয়নি। আমি কি সত্যিই ব্যবহার এড়ানো উচিত json.Unmarshal
?
ioutil.ReadAll
হয় প্রায় সবসময় করতে ভুল জিনিস। এটি আপনার লক্ষ্যের সাথে সম্পর্কিত নয়, তবে পাইপ থেকে নেমে আসা যা কিছু আছে তা সংরক্ষণ করার জন্য আপনার পর্যাপ্ত পরিমাণের স্মৃতি থাকা দরকার, এমনকি যদি আপনার জেএসএনে শেষ 20 টিবি সাড়া শেষের পরে থাকে }
।
io.LimitReader
প্রতিরোধ করতে ব্যবহার করতে পারেন ।