ماڈیول اسباق (1/5)
اعلی درجے کی `fmt`
fmt پیکیج Go میں تمام متنی 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 IN_CTED_20 کے لئے PROTECTED_INLINE_20__ کی پیروی نہیں کرتا ہے۔
اہم فعل
| فعل | یہ کیا کرتا ہے |
|---|---|
%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)
}%w کی بجائے %v کا استعمال پرنٹ کرتا ہے خرابی کا پیغام لیکن سلسلہ ٹوٹ جاتا ہے: کوئی کھولنا نہیں، کوئی errors.Is نہیں۔ اصول: اگر آپ چاہتے ہیں کہ کال کرنے والا غلطی کی قسم یا شناخت کو پہچاننے کے قابل ہو، تو %w استعمال کریں (صرف ایک فی Errorf)۔
مشقیں
انٹیجر 42 سے '[42]' سٹرنگ کو فارمیٹ کرنے کے لیے fmt.Sprintf استعمال کریں، پھر اسے پرنٹ کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
struct p کو فعل %+v کے ساتھ پرنٹ کریں (اس میں فیلڈ کے نام شامل ہوں)۔
3 کوششوں کے بعد حل دستیاب ہے۔
fmt.Errorf میں استعمال ہونے والا کون سا فعل errors.Is/As کے لیے ایرر چین کو محفوظ رکھتا ہے؟
err := fmt.Errorf("read %q: ???", path, base)