முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 8 · பாடம் 1 இன் 5பாடத்திட்டத்தில் 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 வடிவத்தை பின்பற்றுகிறது.

முக்கிய வினைச்சொற்கள்

வினைஅது என்ன செய்கிறது
%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ஏற்றுகிறது…

%+v என்ற வினைச்சொல்லுடன் struct p ஐ அச்சிடவும் (அதில் புலப் பெயர்கள் இருக்க வேண்டும்).

எடிட்டரை ஏற்றுகிறது…

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

Quiz#go.m8.l1.e3
தயார்

fmt.Errorf இல் பயன்படுத்தப்படும் எந்த வினைச்சொல், பிழைகளுக்கான பிழைச் சங்கிலியைப் பாதுகாக்கிறது.Is/As?

Go
err := fmt.Errorf("read %q: ???", path, base)
பதில் விருப்பங்கள்