1. ओएस लाइब्रेरी की मूल जानकारी

Golang में os पैकेज ऑपरेटिंग सिस्टम फंक्शन के लिए एक प्लेटफार्म-स्वतंत्र इंटरफेस प्रदान करता है। अगले, हम चरणों को देखेंगे कि os पैकेज का उपयोग फ़ाइल खोलने, बंद करने, पढ़ने, लिखने, साथ ही फ़ाइल विशेषताएँ प्राप्त करने और सेट करने के लिए कैसे करें।

1.1 फ़ाइल खोलना और बंद करना

Go भाषा में, आप os.Open फ़ंक्शन का उपयोग फ़ाइल खोलने के लिए कर सकते हैं, जिससे एक *os.File ऑब्ज

1.3 फ़ाइल गुणवत्ता और अनुमतियाँ

आप os पैकेज से फ़ंक्शंस का उपयोग करके फ़ाइल स्थिति जानकारी तक पहुँच सकते हैं और उसे मॉडिफ़ाई कर सकते हैं। os.Stat या os.Lstat का उपयोग करके os.FileInfo इंटरफ़ेस प्राप्त करें, जो फ़ाइल का आकार, अनुमतियाँ, संशोधन समय, और अधिक जानकारी प्रदान करता है।

यहाँ फ़ाइल स्थिति प्राप्त करने का एक उदाहरण है:

package main

import (
    "fmt"
    "os"
)

func main() {
    fileInfo, err := os.Stat("test.txt")
    if err != nil {
        fmt.Println("फ़ाइल जानकारी प्राप्त करने में त्रुटि:", err)
        return
    }

    // फ़ाइल आकार प्रिंट करें
    fmt.Printf("फ़ाइल आकार: %d बाइट\n", fileInfo.Size())

    // फ़ाइल अनुमतियों को प्रिंट करें
    fmt.Printf("फ़ाइल अनुमतियाँ: %s\n", fileInfo.Mode())
}

यदि आपको फ़ाइल नाम बदलने या फाइल की अनुमतियों को संशोधित करनी हो, तो आप os.Rename का उपयोग करके फ़ाइल का नाम बदल सकते हैं या os.Chmod का उपयोग करके फ़ाइल की अनुमतियों को बदल सकते हैं।

package main

import (
    "fmt"
    "os"
)

func main() {
    // फ़ाइल की अनुमतियों को केवल पढ़ने योग्य बनाएं
    err := os.Chmod("test.txt", 0444)
    if err != nil {
        fmt.Println("फ़ाइल की अनुमतियों को संशोधित करने में त्रुटि:", err)
        return
    }

    // फ़ाइल का नाम बदलें
    renameErr := os.Rename("test.txt", "renamed.txt")
    if renameErr != nil {
        fmt.Println("फ़ाइल का नाम बदलते समय त्रुटि:", renameErr)
        return
    }
    
    fmt.Println("फ़ाइल क्रियाएँ सफल हुईं")
}

यहाँ, हम test.txt फ़ाइल की अनुमतियों को केवल पढ़ने योग्य बनाते हैं, और फिर फ़ाइल का नाम renamed.txt करते हैं। ध्यान दें कि जब फ़ाइल की अनुमतियाँ संशोधित करते समय, सावधान रहें, क्योंकि गलत अनुमतियों की सेटिंग से अप्राप्य फ़ाइलों का कारण बन सकता है।

2. IO पुस्तकालय का मूल उपयोग

Go भाषा में, io पुस्तकालय I/O मौलिक (इनपुट/आउटपुट) आधारों के लिए मौलिक इंटरफेस प्रदान करती है। io पुस्तकालय की डिज़ाइन मौलिकता और संयमित इंटरफेसों के सिद्धांतों का पालन करती है, जो फ़ाइल पढ़ना/लिखना, नेटवर्क संचार, डेटा बफरिंग, और अधिक तरह की I/O क्रियाओं के लिए मौलिक समर्थन प्रदान करती है।

2.2 पाठक और लेखक इंटरफ़ेस का प्रयोग

io.Reader और io.Writer दो मौलिक इंटरफ़ेस हैं जो किसी ऑब्जेक्ट की पठन व लेखन क्रियाओं को निर्धारित करने के लिए प्रयोग होते हैं। ये विभिन्न प्रकार के जैसे फ़ाइल, नेटवर्क कनेक्शन, और बफर द्वारा समाप्त कर दिया जाता है।

io.Reader

io.Reader इंटरफ़ेस में एक Read मेथड होता है:

Read(p []byte) (n int, err error)

यह मेथड io.Reader से p में से अधिकतम len(p) बाइट डेटा को p में पढ़ता है। यह डाटा के पढ़े गए बाइटों की संख्या n (0 <= n <= len(p)) और कोई भी त्रुटि को वापस देता है।

उदाहरण कोड:

package main

import (
    "fmt"
    "io"
    "strings"
)

func main() {
    r := strings.NewReader("नमस्ते, दुनिया!")

    buf := make([]byte, 4)
    for {
        n, err := r.Read(buf)
        if err == io.EOF {
            break
        }
        fmt.Printf("पढ़े गए बाइट: %d, सामग्री: %s\n", n, buf[:n])
    }
}

इस उदाहरण में, हम एक strings.NewReader बनाते हैं ताकि हम स्ट्रिंग से डेटा पढ़ सकें और फिर इस डेटा को 4-बाइट टुकड़ों में पढ़ते हैं।

io.Writer

io.Writer इंटरफ़ेस में एक Write मेथड होता है:

Write(p []byte) (n int, err error)

यह मेथड p से डेटा को अंदरूनी डेटा स्त्रीम में लिखता है, और लिखे गए बाइटों की संख्या और होने वाली कोई भी त्रुटि को वापस देता है।

उदाहरण कोड:

package main

import (
    "fmt"
    "os"
)

func main() {
    data := []byte("नमस्ते, दुनिया!\n")
    n, err := os.Stdout.Write(data)
    if err != nil {
        panic(err)
    }
    fmt.Printf("लिखे गए बाइट: %d\n", n)
}

इस उदाहरण में, हम एक सरल स्ट्रिंग को मानक उत्पादन os.Stdout में लिखते हैं, जो io.Writer का एक अंगीकृती के रूप में कार्य करता है।

2.3 उन्नत पढ़ना/लिखना कार्य

io पैकेज वहाँ कुछ उन्नत फ़ंक्शंस प्रदान करता है जो सामान्य कार्यों को सरल बना सकते हैं, जैसे डेटा की कॉपी करना और एक निर्दिष्ट मात्रा के डेटा को पढ़ना।

कॉपी फ़ंक्शन

io.Copy एक सुविधाजनक विधि है जो बिना किसी बिचौलिये के सीधे डेटा की कॉपी करने के लिए एक io.Reader से io.Writer तक पहुंचने की आवश्यकता नहीं होती है।

नमूना कोड:

package main

import (
    "io"
    "os"
    "strings"
)

func main() {
    r := strings.NewReader("सरल कॉपी कार्रवाई उदाहरण")
    _, err := io.Copy(os.Stdout, r)
    if err != nil {
        panic(err)
    }
}

इस उदाहरण में, हम सीधे एक स्ट्रिंग को मानक आउटपुट में कॉपी करते हैं।

ReadAtLeast फ़ंक्शन

io.ReadAtLeast फ़ंक्शन का उपयोग सुनिश्चित करने के लिए किया जाता है कि कम से कम निर्दिष्ट मात्रा का डेटा एक io.Reader से पढ़ा जाता है इससे पहले कि वह वापस लौटे।

func ReadAtLeast(r Reader, buf []byte, min int) (n int, err error)

नमूना कोड:

package main

import (
    "fmt"
    "io"
    "strings"
)

func main() {
    r := strings.NewReader("Go भाषा चीनी वेबसाइट")
    buf := make([]byte, 14)
    n, err := io.ReadAtLeast(r, buf, 14)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Printf("%s\n", buf[:n])
}

इस उदाहरण में, io.ReadAtLeast कोशिश करता है कम से कम 14 बाइट के डेटा को buf में पढ़ने के लिए।

ये उन्नत पढ़ना/लिखना फ़ंक्शन आपको I/O से संबंधित कार्यों को अधिक प्रभावी ढंग से संभालने देते हैं और अधिक जटिल कार्यक्रम तर्क के लिए मजबूत आधार प्रदान करते हैं।