یہ حصہ 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, hint)
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, length, capacity)
میپوں کی طرح، سلائس کی کمیت صرف ایک ہم آہنگ نشان ہے: کمپائلر 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)
}
}