Prefer strconv over 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())
}

Avoid converting strings to bytes

স্ট্রিংকে বাইটে রূপান্তর করা এড়াতে

একটি স্থায়ী স্ট্রিং থেকে পুনরাবৃত্তি করা থেকে বিরত থাকুন। পরিবর্তন বরং অন্তত: একবার পরিবর্তন করুন এবং ফলাফল জড়িত করুন।

অনুমোদিত নয়:

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)
}

Specify container capacity

কন্টেইনার ধারণকরণের ধারণা

যদি সম্ভাব্য হয়, কন্টেইনারের জন্য মেমোরি পূর্বাভাষ করুন। এটি যোগ করার সময় (কন্টেইনারের মান কনটেন্ট) সিলিন্ডারে সামুচিত অনুমান করার জন্য এটি থাকা মান দিয়ে করতে।

ম্যাপের ধারণকারী হিন্ট

বেস্ট হবে, 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.

Specify slice capacity

স্লাইস ক্ষমতা নির্দেশবদ্ধ করুন

বেশিরভাগ মামলায়, make() দিয়ে একটি স্লাইস ক্ষমতা সম্পর্কে নিদর্শন তথ্য দিয়ে স্থাপন করা যাবে, বিশেষত যখন স্লাইস এর বাড়ানো হবে।

make([]T, length, capacity)

ম্যাপের মতোই স্লাইস ক্ষমতা শুধুমাত্র একটি ইঙ্গিত নয়: কম্পাইলারটি make() এ যতটুকু ধারণ ক্ষমতা জন্য মেমোরি বিভাগ করবে, যা বা পশ্চাতের append() অপারেশন ধরে জোড়বে (যখন স্লাইসের দৈর্ঘ্য তার ক্ষমতা পরিবর্তন করবে), এর পর যেকোনো 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)
  }
}