गोरोइन्स का उपयोग करके गो में समानांतर फ़ाइल डाउनलोड
गो में, गोरोइन्स का उपयोग करके फ़ाइलों को एक साथ डाउनलोड करना और सहेजना संभव है। गोरोइन्स हल्के थ्रेड निष्पादन की अनुमति देते हैं, समानांतर प्रसंस्करण की सुविधा प्रदान करते हैं और प्रदर्शन में सुधार करते हैं।
आयात (
"एन्कोडिंग/जेसन"
"एफएमटी"
"आईओ"
"io/ioutil"
"नेट/http"
"नेट/यूआरएल"
"ओएस"
"पथ/फ़ाइलपथ"
"साथ-साथ करना"
)
// साख
स्थिरांक ऐप_की स्ट्रिंग = ""
स्थिरांक ऐप_सीक्रेट स्ट्रिंग = ""
// प्राधिकरण संकेत - लिपि
var कोड स्ट्रिंग
// सांकेतिक प्रतिक्रिया
टोकनरेस्पॉन्स संरचना टाइप करें {
AccessToken स्ट्रिंग `json:"access_token"`
}
// फ़ाइल संरचना
फ़ाइल संरचना टाइप करें {
पथ स्ट्रिंग
}
// फ़ाइल सूची प्रतिक्रिया
FileListResponse संरचना टाइप करें {
फ़ाइल सूची []फ़ाइल `json:"contents"`
}
// गोरोइन्स का उपयोग करके एक फ़ाइल डाउनलोड करें
func डाउनलोड_फ़ाइल(फ़ाइल फ़ाइल, टोकन टोकनरेस्पॉन्स, wg *sync.WaitGroup) {
डाउनलोड_फाइल := fmt.Sprintf('https://api-content.dropbox.com/1/files/dropbox/%s?access_token=%s', फाइल.पाथ, टोकन.एक्सेसटोकन)
सम्मान, _ := http.Get(download_file)
सम्मान स्थगित करें.Body.Close()
फ़ाइल नाम := फ़ाइलपथ.बेस(फ़ाइल.पथ)
बाहर, त्रुटि := os.Create(फ़ाइल नाम)
यदि त्रुटि !=शून्य {
घबराहट(गलती)
}
स्थगित करें। बंद करें()
io.कॉपी(आउट, रिस्पेक्ट.बॉडी)
wg.हो गया()
}
func मुख्य() {
// प्राधिकरण और टोकन पुनर्प्राप्ति
Authorize_url := fmt.Sprintf('https://www.dropbox.com/1/oauth2/authorize?response_type=code&client_id=%s', app_key)
fmt.Printf(''1. यहां जाएं: %s\n'',authorize_url)
fmt.Println("2. 'अनुमति दें' पर क्लिक करें (आपको पहले लॉग इन करना पड़ सकता है)")
fmt.Println('3. प्राधिकरण कोड की प्रतिलिपि बनाएँ।')
fmt.Printf ("यहां प्राधिकरण कोड दर्ज करें:")
fmt.Scanf('%s', &कोड)
// फ़ाइल सूची प्राप्त करें
file_list_url := fmt.Sprintf("https://api.dropbox.com/1/metadata/dropbox/Camera Uploads?access_token=%s", tr.AccessToken)
resp2, _ := http.Get(file_list_url)
सम्मान स्थगित करें2.Body.Close()
सामग्री2, _ := ioutil.ReadAll(resp2.Body)
var flr FileListResponse
json.Unmarshal(contents2, &flr)
// सभी गोरआउट्स समाप्त होने तक प्रतीक्षा करने के लिए वेटग्रुप
var wg sync.WaitGroup
// फ़ाइलें एक साथ डाउनलोड करें
मेरे लिए, फ़ाइल := रेंज flr.FileList {
wg.जोड़ें(1)
डाउनलोड_फ़ाइल पर जाएँ (फ़ाइल, tr, &wg)
अगर मैं >= 2 {
तोड़ना
}
}
wg.रुको()
}
इस संशोधित कोड में, हम निष्पादित होने वाले गोरआउट्स की संख्या को ट्रैक करने के लिए wg नामक एक सिंक.वेटग्रुप जोड़ते हैं। हम प्रत्येक goroutine शुरू करने से पहले wg बढ़ाते हैं और जब प्रत्येक goroutine wg.Done() का उपयोग करके समाप्त हो जाता है तो इसे घटाते हैं। मुख्य गोरोइनट wg.Wait() को कॉल करके सभी गोरोइन के समाप्त होने की प्रतीक्षा करता है। यह सुनिश्चित करता है कि प्रोग्राम सभी फ़ाइलें डाउनलोड होने से पहले बाहर नहीं निकलता है।