Использование указателя на Map
m
имеет тип []Map
, поэтому m[bucketNumber]
будет иметь тип Map
, а не bucket
.
Изменить введите от m
до *Map
и разыменование при использовании:
func Insert(m *Map, key string, value float64) { // m is sliceofslices type
bucketNumber := (key[0] - 'A') / 7
if cap((*m)[bucketNumber]) == 0 { // first insert, so create the backing array
(*m)[bucketNumber] = make([]Entry, 0, 100)
}
}
И передайте адрес stockData
:
gomap.Insert(&stockData, "AAPL", 94.56)
Хотя обратите внимание, что массивы в Go вторичный. Код был бы проще и, вероятно, более эффективным, если бы вы использовали кусочки вместо массивов (и указатель на массивы).
Экспорт bucket
и использование []Bucket
Если вы можете экспортировать bucket
, тогда вы можете изменить тип m
на []Bucket
:
func Insert(m []Bucket, key string, value float64) { // m is sliceofslices type
bucketNumber := (key[0] - 'A') / 7
if cap(m[bucketNumber]) == 0 { // first insert, so create the backing array
m[bucketNumber] = make([]Entry, 0, 100)
}
}
и назвать его как:
Insert(stockData[:], "AAPL", 94.56)