মডিউল পাঠ (1/5)
উন্নত `fmt`
fmt প্যাকেজ হল গো-তে সমস্ত পাঠ্য I/O-এর গেটওয়ে৷ এটি ভালভাবে জানার অর্থ হল পঠনযোগ্য লগ লেখা, তথ্যগত ত্রুটি এবং বাহ্যিক লাইব্রেরিগুলিকে অবলম্বন না করেই বাজেভাবে মানগুলি বিন্যাস করা৷
চারটি পরিবার
fmt চারটি পরিবারে ফাংশন প্রকাশ করে, উপসর্গ দ্বারা আলাদা:
Print*→os.Stdout(Print,Println,Printf) কে লেখেন।Fprint*→ যেকোনোio.Writer(Fprintln(os.Stderr, ...),Fprintf(file, ...)) কে লেখে।Sprint*→ মুদ্রণ ছাড়াই একটি স্ট্রিং প্রদান করে (Sprintf,Sprintln)।Errorf→ একটি বিন্যাস তৈরি করেerror।
fmt.Println("hello") // stdout
fmt.Fprintln(os.Stderr, "boom") // stderr
s := fmt.Sprintf("[%d]", 42) // "[42]"
err := fmt.Errorf("parse %q: %w", in, base) // wrapped errorPrint এবং Println এর মধ্যে পার্থক্য হল শুধুমাত্র আর্গুমেন্ট এবং ট্রেলিং নিউলাইনের মধ্যে স্পেস: Println সবসময় \n যোগ করে, Print এর জন্য AGYTOK_INLINE_20__ AG_2 এর জন্য অনুসরণ করে না।
প্রধান ক্রিয়াপদ
| ক্রিয়া | এটা কি করে |
|---|---|
%v | ডিফল্ট মান (কার্যকর হলে String() কল করুন)। |
%+v | ক্ষেত্রের নাম দিয়ে গঠন করুন। |
%#v | সিনট্যাক্স যান (ডিবাগিং এবং স্ন্যাপশটের জন্য দরকারী)। |
%T | মানের গতিশীল প্রকার। |
%d | বেস 10 এ পূর্ণসংখ্যা। |
%b %o %x %X | বাইনারি, অক্টাল, হেক্সাডেসিমেল (ছোট হাতের/বড় হাতের)। |
%f %e %g | ফ্লোটিং পয়েন্ট: স্থির, সূচকীয়, কমপ্যাক্ট। |
%s | স্ট্রিং (বা error/Stringer)। |
%q | গো-স্টাইল উদ্ধৃত স্ট্রিং (পলায়ন অন্তর্ভুক্ত)। |
%c | ইউনিকোড অক্ষর (rune)। |
%p | হেক্সাডেসিমেলে পয়েন্টার। |
%w | ত্রুটি মোড়ানো (শুধুমাত্র Errorf এর ভিতরে)। |
type Point struct{ X, Y int }
p := Point{1, 2}
fmt.Printf("%v\n", p) // {1 2}
fmt.Printf("%+v\n", p) // {X:1 Y:2}
fmt.Printf("%#v\n", p) // main.Point{X:1, Y:2}
fmt.Printf("%T\n", p) // main.Pointপ্রস্থ, নির্ভুলতা, পতাকা
সংখ্যাসূচক এবং স্ট্রিং ক্রিয়াগুলি প্রস্থ এবং নির্ভুলতা গ্রহণ করে:
%6d→ ন্যূনতম প্রস্থ 6, স্পেস সহ বাম প্যাডিং।%-6d→ প্রস্থ 6, ডান প্যাডিং (পতাকা-)।%06d→ প্রস্থ 6,0সহ প্যাডিং (পতাকা0)।%.2f→ নির্ভুলতা 2 দশমিক সংখ্যা।%8.2f→ প্রস্থ 8, নির্ভুলতা 2।
fmt.Printf("|%6d|\n", 42) // | 42|
fmt.Printf("|%-6d|\n", 42) // |42 |
fmt.Printf("|%06d|\n", 42) // |000042|
fmt.Printf("|%8.2f|\n", 3.14)// | 3.14|সারিবদ্ধ টেবিলের জন্য, টেক্সট কলামের জন্য নির্দিষ্ট প্রস্থ + %-...s হল text/tabwriter এ যাওয়ার আগে সবচেয়ে সহজ প্যাটার্ন।
%w এবং ত্রুটি মোড়ানো
%w বিশেষ: এটি শুধুমাত্র fmt.Errorf-এর ভিতরে কাজ করে এবং চেইনের মূল ত্রুটিটি সংরক্ষণ করে, যাতে errors.Is এবং errors.As এটি চলতে পারে৷
if _, err := os.Open(path); err != nil {
return fmt.Errorf("read config %q: %w", path, err)
}%v এর পরিবর্তে %w প্রিন্ট ত্রুটির বার্তা ব্যবহার করে কিন্তু চেইন ভেঙে দেয়: কোনো মোড়ক নেই, কোনো errors.Is নেই। নিয়ম: আপনি যদি চান যে কলকারী ত্রুটির ধরন বা পরিচয়টি আলাদা করতে সক্ষম হোক, তাহলে %w ব্যবহার করুন (শুধুমাত্র প্রতি Errorf একটি)।
ব্যায়াম
পূর্ণসংখ্যা 42 থেকে '[42]' স্ট্রিং ফরম্যাট করতে fmt.Sprintf ব্যবহার করুন, তারপর এটি প্রিন্ট করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
%+v ক্রিয়া দিয়ে struct p প্রিন্ট করুন (এতে অবশ্যই ক্ষেত্রের নাম অন্তর্ভুক্ত করা উচিত)।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
fmt.Errorf-এ ব্যবহৃত কোন ক্রিয়াটি errors.Is/As-এর জন্য এরর চেইন সংরক্ষণ করে?
err := fmt.Errorf("read %q: ???", path, base)