Метод reflect.Value.Index
Метод reflect.Value.Index возвращает новое значение
reflect.Value, представляющее элемент коллекции
по указанному индексу. Метод принимает один параметр -
индекс элемента типа int, и возвращает
reflect.Value элемента. Он работает со слайсами,
массивами и строками. Если значение не является
слайсом, массивом или строкой, или индекс выходит за
границы, возникает паника.
Синтаксис
value.Index(i int) reflect.Value
Пример
Давайте получим второй элемент из слайса строк:
package main
import (
"fmt"
"reflect"
)
func main() {
slice := []string{"a", "b", "c", "d", "e"}
val := reflect.ValueOf(slice)
elem := val.Index(1)
fmt.Println(elem.Interface())
}
Результат выполнения кода:
"b"
Пример
Давайте получим третий элемент из массива целых чисел:
package main
import (
"fmt"
"reflect"
)
func main() {
array := [5]int{1, 2, 3, 4, 5}
val := reflect.ValueOf(array)
elem := val.Index(2)
fmt.Println(elem.Interface())
}
Результат выполнения кода:
3
Пример
Давайте получим символ из строки по индексу:
package main
import (
"fmt"
"reflect"
)
func main() {
str := "abcde"
val := reflect.ValueOf(str)
elem := val.Index(0)
fmt.Println(elem.Interface())
}
Результат выполнения кода:
97
Обратите внимание: для строк метод возвращает код символа
типа uint8 (байт), а не символ как строку.
Пример
Давайте получим последний элемент слайса, используя
метод Len для определения длины:
package main
import (
"fmt"
"reflect"
)
func main() {
slice := []int{10, 20, 30, 40, 50}
val := reflect.ValueOf(slice)
last := val.Index(val.Len() - 1)
fmt.Println(last.Interface())
}
Результат выполнения кода:
50
Смотрите также
-
метод
reflect.Value.Len,
который возвращает длину слайса, массива или строки -
метод
reflect.Value.Field,
который возвращает поле структуры по индексу -
метод
reflect.Value.Elem,
который возвращает значение, на которое указывает указатель -
метод
reflect.Value.Interface,
который преобразуетreflect.Valueв обычный интерфейс