РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1519 of 1593 menu

Метод reflect.Value.Len

Метод reflect.Value.Len возвращает длину значения, хранящегося в reflect.Value. Он работает с массивами, срезами, картами, каналами и строками. Если значение не является одним из перечисленных типов, метод вызывает панику. Метод не принимает никаких параметров и возвращает целое число типа int.

Синтаксис

func (v Value) Len() int

Пример для среза

Получим длину среза строк с помощью метода reflect.Value.Len:

package main import ( "fmt" "reflect" ) func main() { slice := []string{"a", "b", "c", "d", "e"} v := reflect.ValueOf(slice) length := v.Len() fmt.Println(length) }

Результат выполнения кода:

5

Пример для массива

Метод также работает с массивами. Получим длину массива целых чисел:

package main import ( "fmt" "reflect" ) func main() { arr := [5]int{1, 2, 3, 4, 5} v := reflect.ValueOf(arr) length := v.Len() fmt.Println(length) }

Результат выполнения кода:

5

Пример для карты

Для карт метод возвращает количество ключей. Получим длину карты:

package main import ( "fmt" "reflect" ) func main() { m := map[string]int{ "a": 1, "b": 2, "c": 3, } v := reflect.ValueOf(m) length := v.Len() fmt.Println(length) }

Результат выполнения кода:

3

Пример для канала

Для каналов метод возвращает количество элементов, ожидающих в буфере. Получим длину буферизированного канала:

package main import ( "fmt" "reflect" ) func main() { ch := make(chan int, 3) ch <- 1 ch <- 2 v := reflect.ValueOf(ch) length := v.Len() fmt.Println(length) }

Результат выполнения кода:

2

Пример для строки

Для строк метод возвращает количество байт (не рун). Получим длину строки:

package main import ( "fmt" "reflect" ) func main() { str := "abcde" v := reflect.ValueOf(str) length := v.Len() fmt.Println(length) }

Результат выполнения кода:

5

Пример с паникой

Если вызвать метод на значении неподходящего типа, произойдет паника. Например, попробуем получить длину числа:

package main import ( "fmt" "reflect" ) func main() { num := 42 v := reflect.ValueOf(num) defer func() { if r := recover(); r != nil { fmt.Println("Panic:", r) } }() length := v.Len() fmt.Println(length) }

Результат выполнения кода:

"Panic: reflect: call of reflect.Value.Len on int Value"

Смотрите также

  • метод reflect.Value.Cap,
    который возвращает емкость отраженного значения
  • функцию reflect.Type.Len,
    которая возвращает длину типа
  • функцию reflect.Value.Index,
    которая получает элемент по индексу
  • функцию reflect.Value.IsNil,
    которая проверяет, является ли значение нулевым
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить