தொகுதி பாடங்கள் (3/5)
`io` மற்றும் `os`: கோப்புகள் மற்றும் ஸ்ட்ரீம்கள்
Go இல் கோப்புகள் மற்றும் ஸ்ட்ரீம்களைப் படிப்பது மற்றும் எழுதுவது இரண்டு நிரப்பு தொகுப்புகளைச் சுற்றி வருகிறது: os (திறத்தல், உருவாக்கம், மெட்டாடேட்டா, செயல்முறைகள்) மற்றும் io (Reader/Writer இடைமுகம் மூலம் அந்த ஆதாரம் மூலம்).
கோப்புகளைப் படித்தல் மற்றும் எழுதுதல்: குறுக்குவழிகள்
சிறிய அல்லது உள்ளமைவு கோப்புகளுக்கு, ஒரு அழைப்பு போதும்:
data, err := os.ReadFile("input.txt") // returns []byte
if err != nil {
return err
}
fmt.Println(string(data))
err = os.WriteFile("out.txt", []byte("ciao"), 0644)os.ReadFile திறக்கிறது, எல்லாவற்றையும் நினைவகத்தில் படித்து மூடுகிறது. சில எம்பி வரை சரியானது; அதையும் தாண்டி, ஸ்ட்ரீமிங் சிறந்தது.
ஸ்ட்ரீமிங்கிற்கான கோப்புகளைத் திறக்கிறது
பெரிய கோப்புகள் அல்லது அதிகரிக்கும் அணுகலுக்கு, கோப்பைத் திறந்து defer உடன் மூடவும்:
f, err := os.Open("big.txt") // read-only
if err != nil {
return err
}
defer f.Close()
buf := make([]byte, 4096)
for {
n, err := f.Read(buf)
if n > 0 {
process(buf[:n])
}
if err == io.EOF {
break
}
if err != nil {
return err
}
}os.Open படிக்க மட்டும் திறக்கும். எழுதுவதற்கு os.Create (அது இருந்தால் துண்டிக்கப்படும்) அல்லது os.O_APPEND | os.O_CREATE | os.O_WRONLY போன்ற கொடிகளுடன் os.OpenFile(path, flag, perm) ஐப் பயன்படுத்தவும்.
io.Reader மற்றும் io.Writer: உலகளாவிய இடைமுகங்கள்
type Reader interface { Read(p []byte) (n int, err error) }
type Writer interface { Write(p []byte) (n int, err error) }நிலையான நூலகம் io.Reader ஐ ஏற்கும் இடங்களில் நீங்கள் ஒரு கோப்பை (*os.File), ஒரு சரம் (strings.NewReader), *bytes.Buffer, ஒரு HTTP பதிலை அனுப்பலாம் (__AGYTOK_INLINE_19), io.Writer.
// Copy from a Reader to a Writer (e.g. download → file).
n, err := io.Copy(dst, src)io.Copy என்பது பைட் பைப்லைன்களுக்கான ஒர்க்ஹார்ஸ்: இது இடையகத்தையும் EOFஐயும் சரியாகக் கையாளுகிறது. io.ReadAll(r) EOF வரை அனைத்தையும் []byte இல் படிக்கும்.
os.Args: CLI வாதங்கள்
os.Args என்பது சரங்களின் ஒரு துண்டு: குறியீட்டு 0 என்பது நிரல் பெயர், உண்மையான வாதங்களில் 1 இலிருந்து:
func main() {
if len(os.Args) < 2 {
fmt.Fprintln(os.Stderr, "uso: prog <nome>")
os.Exit(1)
}
fmt.Println("ciao", os.Args[1])
}மேலும் கட்டமைக்கப்பட்ட பாகுபடுத்தலுக்கு (கொடிகள், இயல்புநிலைகள், உதவி) flag தொகுப்பை stdlib அல்லது cobra போன்ற வெளிப்புற நூலகங்களிலிருந்து பயன்படுத்தவும்.
os.Stdin, os.Stdout, os.Stderr
இவை மூன்று உலகளாவிய *os.Fileகள்: io.Reader அல்லது io.Writer ஏற்றுக்கொள்ளப்படும் இடங்களில் நீங்கள் அவற்றைக் கடந்து செல்லலாம்.
fmt.Fprintln(os.Stderr, "log diagnostico")
io.Copy(os.Stdout, os.Stdin) // echoபயிற்சிகள்
முதல் கட்டளை வரி வாதத்தை அச்சிடுக (os.Args[1]). விடுபட்டால், 'manca argomento' என்று அச்சிட்டுத் திரும்பவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
'ciao' என்ற சரத்தை 'out.txt' கோப்பில் os.WriteFile உடன் எழுதவும் (அனுமதிகள் 0644). பிழையைக் கையாளவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
os.Args இல் உள்ள நிரல் பெயரின் குறியீடு என்ன?
fmt.Println(os.Args[???])