ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 8 · 5లో పాఠం 1కోర్సులో 36/50~10 min
మాడ్యూల్ పాఠాలు (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**ని రూపొందిస్తుంది.
Go
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 error

Print మరియు Println మధ్య వ్యత్యాసం కేవలం ** ఆర్గ్యుమెంట్‌లు మరియు వెనుకంజలో ఉన్న కొత్తలైన్ మధ్య ఖాళీ మాత్రమే**: Println ఎల్లప్పుడూ \nని జోడిస్తుంది, _AGYTOK_INLINE_TO_20_INLINE కాదు ఆకృతిని అనుసరిస్తుంది.

ప్రధాన క్రియలు

క్రియఅది ఏమి చేస్తుంది
%vడిఫాల్ట్ విలువ (అమలు చేస్తే String()కి కాల్ చేస్తుంది).
%+vఫీల్డ్ పేర్లతో నిర్మాణం.
%#vగో సింటాక్స్ (డీబగ్గింగ్ మరియు స్నాప్‌షాట్‌లకు ఉపయోగపడుతుంది).
%Tవిలువ యొక్క డైనమిక్ రకం.
%dఆధారం 10లో పూర్ణాంకం.
%b %o %x %Xబైనరీ, ఆక్టల్, హెక్సాడెసిమల్ (చిన్న అక్షరం/పెద్ద అక్షరం).
%f %e %gఫ్లోటింగ్ పాయింట్: స్థిర, ఘాతాంక, కాంపాక్ట్.
%sస్ట్రింగ్ (లేదా error/Stringer).
%qగో-స్టైల్ కోట్ చేయబడిన స్ట్రింగ్ (ఎస్కేప్‌లు చేర్చబడ్డాయి).
%cయూనికోడ్ అక్షరం (rune).
%pహెక్సాడెసిమల్‌లో పాయింటర్.
%wఎర్రర్ ర్యాప్ (Errorf లోపల మాత్రమే).
Go
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.
Go
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 దానిని నడపగలరు.

Go
if _, err := os.Open(path); err != nil {
    return fmt.Errorf("read config %q: %w", path, err)
}

%wకి బదులుగా %vని ఉపయోగించడం వలన దోష సందేశాన్ని ముద్రిస్తుంది కానీ గొలుసును విచ్ఛిన్నం చేస్తుంది: అన్‌ర్యాప్ లేదు, errors.Is. నియమం: కాలర్ ఎర్రర్ యొక్క రకాన్ని లేదా గుర్తింపును గుర్తించగలగాలి అని మీరు కోరుకుంటే, %w (Errorfకి ఒకటి మాత్రమే) ఉపయోగించండి.

వ్యాయామాలు

వ్యాయామం#go.m8.l1.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

పూర్ణాంకం 42 నుండి '[42]' స్ట్రింగ్‌ను ఫార్మాట్ చేయడానికి fmt.Sprintfని ఉపయోగించండి, ఆపై దాన్ని ప్రింట్ చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం#go.m8.l1.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

స్ట్రక్ట్ p ను %+v అనే క్రియతో ముద్రించండి (ఇది తప్పనిసరిగా ఫీల్డ్ పేర్లను కలిగి ఉంటుంది).

ఎడిటర్ లోడ్ అవుతోంది…

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

Quiz#go.m8.l1.e3
సిద్ధంగా ఉంది

fmt.Errorfలో ఉపయోగించిన ఏ క్రియాపదం, errors.Is/As కోసం ఎర్రర్ చెయిన్‌ను భద్రపరుస్తుంది?

Go
err := fmt.Errorf("read %q: ???", path, base)
సమాధాన ఎంపికలు