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

Функция unsafe.String

Функция unsafe.String создает строку из указателя на данные и длины. Первый параметр — указатель на первый байт данных (тип *byte), второй — длина создаваемой строки (тип int). Важно отметить, что эта функция не создает копию данных, а возвращает строку, которая разделяет память с исходными данными.

Синтаксис

unsafe.String(ptr *byte, len int) string

Пример '1' - преобразование массива байтов в строку

Давайте создадим строку из массива байтов:

package main import ( "fmt" "unsafe" ) func main() { data := []byte{97, 98, 99, 100, 101} ptr := &data[0] res := unsafe.String(ptr, len(data)) fmt.Println(res) }

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

"abcde"

Пример '2' - создание строки из части данных

Создадим строку только из первых трех байтов:

package main import ( "fmt" "unsafe" ) func main() { data := []byte{97, 98, 99, 100, 101} ptr := &data[0] res := unsafe.String(ptr, 3) fmt.Println(res) }

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

"abc"

Пример '3' - использование с нулевым указателем

Функция позволяет создать пустую строку при длине 0:

package main import ( "fmt" "unsafe" ) func main() { var ptr *byte res := unsafe.String(ptr, 0) fmt.Println(res == "") }

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

"true"

Пример '4' - изменение исходных данных

Поскольку строка разделяет память с исходными данными, изменение данных повлияет на строку:

package main import ( "fmt" "unsafe" ) func main() { data := []byte{97, 98, 99} ptr := &data[0] res := unsafe.String(ptr, len(data)) fmt.Println(res) data[0] = 122 fmt.Println(res) }

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

"abc" "zbc"

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

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