Метод reflect.Value.Cap
Метод reflect.Value.Cap возвращает ёмкость составного типа,
представленного значением reflect.Value. Он работает с
типами slice, array и chan. Если значение
не является одним из этих типов, метод вызывает панику.
Синтаксис
func (v Value) Cap() int
Пример работы с массивом
Давайте получим ёмкость массива из 5 элементов:
package main
import (
"fmt"
"reflect"
)
func main() {
arr := [5]int{1, 2, 3, 4, 5}
val := reflect.ValueOf(arr)
res := val.Cap()
fmt.Println(res)
}
Результат выполнения кода:
5
Пример работы со слайсом
Давайте создадим слайс с ёмкостью 10 и получим её значение:
package main
import (
"fmt"
"reflect"
)
func main() {
sl := make([]string, 0, 10)
val := reflect.ValueOf(sl)
res := val.Cap()
fmt.Println(res)
}
Результат выполнения кода:
10
Пример работы с каналом
Давайте получим ёмкость буферизированного канала:
package main
import (
"fmt"
"reflect"
)
func main() {
ch := make(chan int, 20)
val := reflect.ValueOf(ch)
res := val.Cap()
fmt.Println(res)
}
Результат выполнения кода:
20
Пример сравнения Len и Cap
Давайте сравним длину и ёмкость слайса после добавления элементов:
package main
import (
"fmt"
"reflect"
)
func main() {
sl := make([]int, 3, 5)
sl = append(sl, 4, 5, 6)
val := reflect.ValueOf(sl)
length := val.Len()
capacity := val.Cap()
fmt.Printf("Len: %d, Cap: %d", length, capacity)
}
Результат выполнения кода:
Len: 6, Cap: 10
Смотрите также
-
метод
reflect.Value.Len,
который возвращает длину составного типа -
тип
reflect.Value,
представляющий отражённое значение Go-переменной -
функцию
reflect.ValueOf,
которая создаёт значениеreflect.Valueиз интерфейса -
тип
reflect.Kind,
который определяет конкретный вид типа данных