Os.Exit () এবং আতঙ্ক () কখন ব্যবহার করবেন?


96

কেউ মধ্যে কী পার্থক্য ব্যাখ্যা গেল os.Exit()এবং panic()তাতে তারা চলে কিভাবে এ অভ্যাস ব্যবহার করা হয়?


11
ভবিষ্যতের গো কোড রিডিংয়ে আশাবাদী সাহায্য করবে এমন একটি মন্তব্য: উদাহরণস্বরূপ প্রচুর কোডে panicত্রুটি থেকে বেরিয়ে আসার জন্য ব্যবহার করা হয়, খাঁটিভাবে বোঝা সহজ যে কারণে এবং অন্য যে কোনও প্যাকেজ আমদানি বাদ দেয়। এর অর্থ এই নয় যে এটি ভাল, বা অহংকারমূলক অনুশীলন! । উদাহরণস্বরূপ কোডের জন্য এটি কেবল একটি স্থান সাশ্রয়কারী ডিভাইস। IRL রিজার্ভ panicজন্য খুব বিশেষ পরিস্থিতিতে।
ইন্টারমেনেট

4
এইচএম..ভুড) বিশেষত "আইআরএল" সংক্ষেপণ - এটি আমার জন্য নতুন :) আপনি কী ব্যাখ্যা দিতে পারেন যে কীভাবে আতঙ্ক প্যাকেজ আমদানি দূর করে?
তৈমুর ফয়েজরাখমানভ

4
panicএকটি অন্তর্নির্মিত। এটা সুপারিশ করা হচ্ছে (পরিস্থিতিতে উপর নির্ভর করে) ভালো কিছু ব্যবহার করতে os.Exit, log.Fatalইত্যাদি, যা অপারেটিং সিস্টেম একটি ত্রুটি কোড ফিরে আসবে (সবসময় সম্ভব হলে প্রস্তাবিত)। এগুলির মধ্যে একটি প্যাকেজ আমদানি করা জড়িত, এবং এইভাবে উদাহরণস্বরূপ কোড "ক্লটার আপ"। উদাহরণ কোড সর্বদা কেবলমাত্র একটি নির্দিষ্ট সমস্যার সমাধান দেখানোর জন্য নেওয়া উচিত। কোডের সাথে অন্যান্য সমস্যাও থাকতে পারে, যা সঠিকভাবে প্রদর্শিত হলে কোড আরও জটিল করে তোলে এবং তাই প্রদত্ত উত্তরের ব্যাখ্যা থেকে বিরত থাকে। ওয়াইএমএমভি
ইন্টারমারনেট

4
ঠিক আছে, এটি পেয়েছি!) বড় ধন্যবাদ) আমি দেখতে পাচ্ছি আমার শব্দভাণ্ডারের জন্য আরও একটি সংক্ষিপ্তসার রয়েছে :)
তৈমুর ফয়েজরাখমানভ

4
এনপি, সাহায্য করে খুশি এবং আপনার অ্যাক্রোনমিকমিক অভিধানটি বাড়িয়ে দিয়েছে :-)
ইন্টারমারনেট

উত্তর:


86

প্রথম সব, যখনই আপনি একটি "কিভাবে এটা অনুশীলন ব্যবহার করা হয়" প্রশ্ন আছে, একটি ভালো উপায় শুরু করার জন্য হয় অনুসন্ধান যান সোর্স কোড (অথবা কোনো বড় যথেষ্ট যান কোড বেস, সত্যিই), এবং প্যাকেজ ডক্স উত্তরের জন্য।

এখন, os.Exitএবং panicএকেবারে পৃথক। panicযখন প্রোগ্রাম, বা এর অংশটি অপরিবর্তনযোগ্য অবস্থায় পৌঁছেছে তখন ব্যবহৃত হয়।

যখন panicরান-টাইমের ত্রুটিগুলির জন্য স্পষ্টভাবে অন্তর্ভুক্ত করা হয় যেমন সীমা ছাড়িয়ে কোনও স্লাইসকে সূচক করা বা কোনও প্রকারের ব্যর্থতা ব্যর্থ করা হয়, এটি তত্ক্ষণাত্ বর্তমান ফাংশনটির সম্পাদন থামিয়ে দেয় এবং গোরোটিনের স্ট্যাকটি আনওয়াইন্ডিং শুরু করে, পথে কোনও স্থগিত ফাংশন চালায়। যদি সেই অনিচ্ছাকৃত গুরোটিনের স্ট্যাকের শীর্ষে পৌঁছে, প্রোগ্রামটি মারা যায়।

os.Exitআপনার পুনরুদ্ধার বা মুলতুবি সাফ করার বিবরণী চালানোর কোনও সম্ভাবনা না থাকলে তত্ক্ষণাত্ প্রোগ্রামটি বন্ধ করতে হবে এবং একটি ত্রুটি কোডও ফিরে আসে (যা অন্যান্য প্রোগ্রামগুলি ঘটেছে তা জানাতে ব্যবহার করতে পারে)। এটি পরীক্ষাগুলিতে কার্যকর, যখন আপনি ইতিমধ্যে জানেন যে এই পরীক্ষার ব্যর্থ হওয়ার পরে, অন্যটিও ব্যর্থ হবে, সুতরাং আপনি সম্ভবত এখনই প্রস্থান করতে পারেন। এটি যখন আপনার প্রোগ্রামটি করার জন্য প্রয়োজনীয় সমস্ত কাজ করে থাকে তখন এটি ব্যবহার করা যেতে পারে এবং এখন কেবল প্রস্থান করা দরকার, অর্থাত কোনও সহায়তা বার্তা প্রিন্ট করার পরে।

বেশিরভাগ সময় আপনি ব্যবহার করবেন না panic(আপনার errorপরিবর্তে ফিরে আসা উচিত ) os.Exitএবং পরীক্ষার ক্ষেত্রে এবং দ্রুত প্রোগ্রামের সমাপ্তির জন্য আপনার প্রায়শই কোনও ক্ষেত্রে প্রয়োজন হয় না ।


9
"এটি পরীক্ষাগুলিতে কার্যকর, যখন আপনি ইতিমধ্যে জানেন যে এই পরীক্ষার ব্যর্থ হওয়ার পরে, অন্যটিও ব্যর্থ হবে ..." এটি নির্ভরশীল পরীক্ষাগুলির একটি পরীক্ষার বিরোধী ধাঁচের গন্ধ পেয়েছে। একটি ভাল-লিখিত পরীক্ষা স্যুটে, প্রতিটি পরীক্ষা স্বতন্ত্র; প্রদত্ত যে কোনও পরীক্ষার ফলাফল কখনই অন্য কোনও পরীক্ষার ফলাফল নির্ধারণ করা উচিত নয়।
gotgenes

4
@ gotgenes অগত্যা নয়। যদি আমার একটি পরীক্ষা থাকে যে একটি নির্দিষ্ট ফাংশন একটি নন-শিল স্ট্রাক্ট দেয়, এবং সেই পরীক্ষাটি ব্যর্থ হয়, তবে আমি আশা করতে পারি যে কাঠামোর মানগুলি পরীক্ষা করে এমন সমস্ত পরীক্ষাও ব্যর্থ হতে চলেছে। এটি নির্ভর করে কোড যা পরীক্ষাগুলি নয়। (এটি বলেছিল, আমি সে exitক্ষেত্রে ব্যবহার করব না, আমি কেবল ব্যর্থতার বড় স্ট্যাকের আশা করতাম।)
ডেভিড মোলস

84

প্রথমত, os.Exit()কোনও ত্রুটি ছাড়াই সাধারণত প্রোগ্রামটি থেকে বেরিয়ে আসার জন্য ব্যবহার করা যেতে পারে এবং আতঙ্কিত হবেন না, সুতরাং এটিই একটি মূল পার্থক্য। আর একটি হ'ল আতঙ্কটি কোথাও ধরা এবং উপেক্ষা করা বা লগ করে ব্যবহার করা যেতে পারে recover

তবে যদি আমরা কোনও ভ্রান্ত প্রস্থান কোডের কথা বলি তবে আসুন বলি:

panicযখন কোনও কিছু মারাত্মকভাবে ভুল হয় তখন ব্যবহার করুন , সম্ভবত একটি প্রোগ্রামার ত্রুটি যা প্রযোজনায় যাওয়ার আগে ধরা উচিত ছিল। এজন্য এটি স্ট্যাকটি প্রিন্ট করে।

os.Exit(errorCode)আপনি চাইলে ব্যবহার করুন বা এর মতো কিছু:

  1. স্ক্রিপ্টিং উদ্দেশ্যে প্রোগ্রামের প্রস্থান কোডটি নিয়ন্ত্রণ করুন।

  2. প্রত্যাশিত কোনও ত্রুটির উপর সুশৃঙ্খলভাবে প্রস্থান পেতে চান (যেমন ব্যবহারকারী ইনপুট ত্রুটি)।

তাই মূলত আতঙ্ক আপনার জন্য, আপনার ব্যবহারকারীর জন্য একটি খারাপ প্রস্থান কোড।


ধন্যবাদ খুব সহায়ক!)
তৈমুর ফয়েজরাখমানভ

14
"সুতরাং আতঙ্ক আপনার পক্ষে, আপনার ব্যবহারকারীর জন্য একটি খারাপ প্রস্থান কোড is" <- দুর্দান্ত টিপ
psousa

4
আমরা কি বলতে পারি যে প্যানিক () কোনওভাবেই সরল সি-তে সাধারণ দাবী () কলটির সাথে সম্পর্কিত? ভাল .. আমি জানি আমি উত্পাদনের দিকে ধাক্কা দেওয়ার আগে আমি সবসময় দৃ call় কলটি সরিয়ে ফেলি, নতুন বৈশিষ্ট্য পরীক্ষা করার সময় আমি কেবল তাদের সক্ষম করি। আমি যা বলছি তা হ'ল বেশিরভাগ সময় আমি আক্রমণকারীদের যাচাই করার জন্য দৃ (়পদ () ব্যবহার করি যা আমার অনুমান করা উচিত। আপনি কি আতঙ্কের জন্য একই ব্যবহার দেখতে পাচ্ছেন ()? :-)
yves বাউমস

7

মূল পার্থক্যগুলি হ'ল:

  1. os.Exit পিছিয়ে ফাংশন কার্যকর করা এড়িয়ে যায়।
  2. সহ os.Exit, আপনি প্রস্থান কোড নির্দিষ্ট করতে পারেন।
  3. panicos.Exitনা হওয়া অবস্থায় শেষ হচ্ছে। (মনে হচ্ছে অন্যান্য উত্তরগুলি এর উল্লেখ করে না))

যদি আপনার পিছিয়ে ফাংশনটি কার্যকর করতে হয় তবে আপনার কাছে বিকল্প নেই panic। (অন্যদিকে, যদি আপনি পিছিয়ে ফাংশন কার্যকর করতে চান, ব্যবহার করুন os.Exit))

যদি কোনও শূণ্য ফাংশনটি এমনভাবে সংজ্ঞায়িত হয়:

  1. ফাংশন শাখা অনেক রয়েছে
  2. সমস্ত শাখা returnবা দিয়ে সমাপ্ত হয়panic

তারপরে আপনি এর panicসাথে প্রতিস্থাপন করতে পারবেন না os.Exitঅন্যথায় সংকলক "ফাংশনের শেষে প্রত্যাবর্তন অনুপস্থিত" বলে প্রোগ্রামটি সংকলন করতে অস্বীকার করবে। (গো এখানে খুব বোবা, এমনকি log.Panicকোনও ফাংশনও শেষ করে না))

অন্যান্য শর্তে:

  1. panicসত্যিই তারযুক্ত কিছু ঘটে যখন ব্যবহার করুন , যেমন প্রোগ্রামিং লজিক ত্রুটি।
  2. os.Exitনির্দিষ্ট প্রস্থান কোড সহ আপনি যখন তাত্ক্ষণিক প্রস্থান চান তখন ব্যবহার করুন ।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.