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

Функция unsafe.StringData

Функция unsafe.StringData из пакета unsafe возвращает указатель на первый байт строки, представленный как unsafe.Pointer. В первый параметр передается строка, для которой нужно получить указатель на ее байтовые данные. Эта функция полезна при работе с низкоуровневыми операциями, когда требуется прямой доступ к содержимому строки без копирования.

Важно понимать, что полученный указатель действителен только до тех пор, пока строка существует в памяти и не была перемещена сборщиком мусора. Использование возвращенного указателя после того, как строка вышла из области видимости, может привести к неопределенному поведению.

Синтаксис

unsafe.StringData(str)

Пример

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

package main import ( "fmt" "unsafe" ) func main() { str := "hello" ptr := unsafe.StringData(str) b := (*byte)(ptr) fmt.Printf("%c\n", *b) }

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

"h"

Пример

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

package main import ( "fmt" "unsafe" ) func main() { str := "12345" ptr := unsafe.StringData(str) bytes := unsafe.Slice(ptr, len(str)) fmt.Printf("%v\n", bytes) }

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

[49 50 51 52 53]

Пример

Давайте используем unsafe.StringData для сравнения двух строк без копирования:

package main import ( "fmt" "unsafe" ) func main() { str1 := "abcde" str2 := "abcde" ptr1 := unsafe.StringData(str1) ptr2 := unsafe.StringData(str2) if ptr1 == ptr2 { fmt.Println("Strings share same memory") } else { fmt.Println("Strings have different memory") } }

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

"Strings share same memory"

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

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