Решение - использовать функцию получения.
Мы выделяем все не указательные поля, например, в структуре с именем barPublic
. Функция getByID
вернет копию этой структуры. Чтобы получить доступ к значениям из карты bar
, мы затем используем специальную функцию получения getByIDAndKey
.
// struct containing non pointer fields of bar
type barPublic struct {
x string
}
type bar struct {
barPublic
largeMap map[int]int
}
var cache map[int]bar
func getByID(id int) (barPublic, bool) {
v, ok := cache[id]
if !ok {
return barPublic{}, false
}
return v.barPublic, true
}
func getByIDAndKey(id, key int) int {
v, ok := cache[id]
if !ok {
return 0, false
}
w, ok := v.largeMap[key]
if !ok {
return 0, false
}
return w, true
}