Метод 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,
которая проверяет, является ли значение нулевым