سلائسز اور نقشے کا استقبال کرنا
یاد رہے کہ جب بھی ایک نقشہ یا ایک سلائس فنکشن پیرامیٹر کے طور پر پاس کیا جاتا ہے، تو اگر آپ ان کا حوالہ رکھیں تو صارف انہیں ترتیب دے سکتے ہیں۔
غیر موصول تجاویز:
func (d *Driver) SetTrips(trips []Trip) {
d.trips = trips
}
trips := ...
d1.SetTrips(trips)
// کیا آپ d1.trips کو ترتیب دینے کی کوشش کر رہے ہیں؟
trips[0] = ...
مستحبہ تجاویز:
func (d *Driver) SetTrips(trips []Trip) {
d.trips = make([]Trip, len(trips))
copy(d.trips, trips)
}
trips := ...
d1.SetTrips(trips)
// یہاں ہم trips[0] کو ترتیب دیتے ہیں، لیکن یہ d1.trips پر اثر انداز نہیں ہوگا
trips[0] = ...
سلائس یا نقشے واپسی
اسی طرح، صارفین کو یہ بھی یاد رکھنا چاہئے کہ وہ نقشہ یا سلائس کو ترتیب دیں جو داخلی حالت کو ظاہر کرتے ہیں۔
غیر موصول تجاویز:
type Stats struct {
mu sync.Mutex
counters map[string]int
}
// وقت کی تصویر موجودہ حالت واپس دیتا ہے
func (s *Stats) Snapshot() map[string]int {
s.mu.Lock()
defer s.mu.Unlock()
return s.counters
}
// وقت کی تصویر اب میوٹیکس کی حفاظت میں نہیں ہے
// لہذا وقت کی تصویر کا کوئی رسائی ڈیٹا ریس اور موثر ہوگا
snapshot := stats.Snapshot()
مستحبہ تجاویز:
type Stats struct {
mu sync.Mutex
counters map[string]int
}
func (s *Stats) Snapshot() map[string]int {
s.mu.Lock()
defer s.mu.Unlock()
result := make(map[string]int, len(s.counters))
for k, v := range s.counters {
result[k] = v
}
return result
}
// وقت کی تصویر اب نقل ہے
snapshot := stats.Snapshot()