Чтобы получить длину любого среза, я использую reflect.ValueOf(slice).Len()
. Чтобы задать длину любого среза, я использую reflect.ValueOf(&slice).Elem().SetLen(n)
.
. В моей структуре есть поле типа reflect.Value
, а значение установлено на reflect.ValueOf(&slice)
, чтобы я мог изменить срез. Но теперь я не могу получить длину нижележащего среза.
Из-за call of reflect.Value.Len on ptr Value
, если я позвоню напрямую Len()
, будет * * * * * *, если я вызову Elem().Len()
.
Ниже приведена функция, которую я пытался реализовать:
func pop(slice interface{}) interface{} {
v := reflect.ValueOf(slice)
length := v.Len()
last := v.Index(length - 1)
v.SetLen(length - 1)
return last
}
Как я могу сделать оба с refect.Value
указателя слайса?