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

Функция unsafe.Slice

Функция unsafe.Slice создает слайс, используя указатель на первый элемент массива и длину. Первым параметром функция принимает указатель на произвольный тип, вторым - длину создаваемого слайса. Возвращаемое значение представляет собой слайс типа []T, где T - тип элемента, на который указывает переданный указатель. Эта функция позволяет преобразовать непрерывный блок памяти в слайс, что особенно полезно при работе с сырыми данными.

Синтаксис

unsafe.Slice(ptr, length)

Пример

Давайте создадим слайс из указателя на первый элемент массива:

package main import ( "fmt" "unsafe" ) func main() { arr := [5]int{1, 2, 3, 4, 5} ptr := unsafe.Pointer(&arr[0]) res := unsafe.Slice((*int)(ptr), 5) fmt.Println(res) }

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

[1 2 3 4 5]

Пример

Давайте создадим слайс строк из непрерывного блока памяти:

package main import ( "fmt" "unsafe" ) func main() { arr := []string{"a", "b", "c", "d", "e"} ptr := unsafe.Pointer(&arr[0]) res := unsafe.Slice((*string)(ptr), 3) fmt.Println(res) }

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

[a b c]

Пример

Давайте создадим слайс байт из указателя на данные:

package main import ( "fmt" "unsafe" ) func main() { data := [8]byte{'H', 'e', 'l', 'l', 'o', ' ', 'G', 'o'} ptr := unsafe.Pointer(&data[0]) res := unsafe.Slice((*byte)(ptr), 8) fmt.Println(string(res)) }

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

"Hello Go"

Пример

Давайте создадим слайс с использованием функции unsafe.Add для изменения смещения:

package main import ( "fmt" "unsafe" ) func main() { arr := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} ptr := unsafe.Add(unsafe.Pointer(&arr[0]), 3*unsafe.Sizeof(arr[0])) res := unsafe.Slice((*int)(ptr), 4) fmt.Println(res) }

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

[4 5 6 7]

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

  • функцию unsafe.Pointer,
    которая представляет указатель на произвольный тип данных
  • функцию unsafe.Sizeof,
    которая возвращает размер типа в байтах
  • функцию unsafe.Add,
    которая выполняет арифметику указателей
  • функцию unsafe.SliceData,
    которая возвращает указатель на первый элемент слайса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить