Golang की कोडिंग दृष्टिकोण से कोडिंग दिशानिर्देश
इस खंड में गोलैंग कोडिंग के लिए एक कोडिंग दिशानिर्देश प्रदान किया गया है जो प्रदर्शन में सुधार करने के लिए फायदेमंद है।
fmt की बजाय strconv का प्राथमिकता दें
प्राथमिक्य इंट को स्ट्रिंग में या स्ट्रिंग को प्राथमिक्य में बदलते समय, strconv
fmt
से अधिक तेज है।
सिफारिश नहीं:
for i := 0; i < b.N; i++ {
s := fmt.Sprint(rand.Int())
}
सिफारिश किया जाता है:
for i := 0; i < b.N; i++ {
s := strconv.Itoa(rand.Int())
}
स्ट्रिंग को बाइट्स में बदलने से बचें
एक निश्चित स्ट्रिंग से बार-बार बाइट स्लाइस बनाने से बचें। बजाय इसके, एक बार परिवर्तन करें और परिणाम को पकड़ें।
सिफारिश नहीं:
for i := 0; i < b.N; i++ {
w.Write([]byte("Hello world"))
}
सिफारिश किया जाता है:
data := []byte("Hello world")
for i := 0; i < b.N; i++ {
w.Write(data)
}
कंटेनर क्षमता की निर्दिष्टता
यदि संभव हो, तो कंटेनर क्षमता का समर्थन करें ताकि कंटेनर के लिए मेमोरी पूर्व-संकलन करें। इससे, तत्पर तत्पर वस्तुओं को जोड़ते समय पश्चात्तर आवंटन (कंटेनर की प्रतिलिपि और आकार बदलने) काम करना कम होता है।
मैप क्षमता संकेत
अधिकांश मामलों में, make()
के साथ शुरूकरते समय क्षमता जानकारी प्रदान करें।
make(map[T1]T2, संकेत)
make()
को क्षमता संकेत प्रदान करना मैप को प्रारंभिककरण में मानवीय स्मरण कम करने का प्रयास करेगा, मानचित्र में तत्पर तत्पर वस्तुओं को जोड़ने पर मेमोरी पुनर्निर्धारण कम करेगा।
ध्यान दें, चांदनी के विपरीत, मानचित्र क्षमता संकेत पूर्ण पूर्व-संकलन की गारंटी नहीं देता है, लेकिन यह मानचित्र बाल्टी की संख्या का अनुमान लगाने के लिए प्रयोग किया जाता है। इसलिए, चांदनी वस्तुओं को मानचित्र में जोड़ते समय आवंटन हो सकता है, भले ही मानचित्र क्षमता को निर्दिष्ट किया जा रहा हो।
सिफारिश नहीं:
m := make(map[string]os.FileInfo)
files, _ := os.ReadDir("./files")
for _, f := range files {
m[f.Name()] = f
}
// m is created without a size hint; there may be more allocations at runtime.
सिफारिश किया जाता है:
files, _ := os.ReadDir("./files")
m := make(map[string]os.FileInfo, len(files))
for _, f := range files {
m[f.Name()] = f
}
// m is created with a size hint; there may be fewer allocations at runtime.
स्लाइस क्षमता निर्दिष्ट करें
अधिकांश मामलों में, make()
के साथ एक स्लाइस को शुरूकरते समय क्षमता जानकारी प्रदान करें, विशेषतः जब स्लाइस को जोड़ने के लिए करें।
make([]T, लंबाई, क्षमता)
मानचित्रों के विपरीत, स्लाइस क्षमता सिर्फ एक संकेत नहीं है: कंपाइलर make()
में प्रदान की जाने वाली स्लाइस क्षमता के लिए पर्याप्त मेमोरी आवंटित करेगा, जिसका मतलब है कि उसके बाद के किसी भी append()
क्रियाएँ शून्य आवंटनों में परिणामित होंगी (जब तक स्लाइस की लंबाई इसकी क्षमता के बराबर नहीं हो जाती, उसके बाद कोई भी जोड़ने में स्वीकृति देने पर आकार बदले जा सकते हैं)।
सिफारिश नहीं:
for n := 0; n < b.N; n++ {
data := make([]int, 0)
for k := 0; k < size; k++{
data = append(data, k)
}
}
सिफारिश किया जाता है:
for n := 0; n < b.N; n++ {
data := make([]int, 0, size)
for k := 0; k < size; k++{
data = append(data, k)
}
}