GO_INTERVIEW_LIB Telegram 470
💬 Как получить адреса байтов строки в Go?

1. Использование unsafe до версии Go 1.22. До версии Go 1.22 получение адресов байтов строки было возможно только через пакет unsafe. Это небезопасный способ, но он работает:


package main

import (
"unsafe"
)

func main() {
str := "Hello, Go!"
addr := unsafe.StringData(str)
println(addr, string(*addr))
}


2. Использование reflect с версии Go 1.23

Начиная с версии Go 1.23, метод reflect.Value.UnsafePointer позволяет получить адреса байтов строки:


package main

import (
"reflect"
)

func main() {
str := "Hello, Go!"
addr := (*byte)(reflect.ValueOf(str).UnsafePointer())
println(addr, string(*addr))
}


3. Конвертация строки в срез байтов. С версии Go 1.22 была добавлена оптимизация, которая позволяет конвертировать строки в срезы байтов без копирования памяти, если байты не будут изменяться. Это позволяет безопасно получать адреса байтов строки:


package main

func main() {
str := "Hello, Go!"
byteSlice := []byte(str)
addr := &byteSlice[0]
println(addr, string(*addr))
}
🔥5👍1



tgoop.com/go_interview_lib/470
Create:
Last Update:

💬 Как получить адреса байтов строки в Go?

1. Использование unsafe до версии Go 1.22. До версии Go 1.22 получение адресов байтов строки было возможно только через пакет unsafe. Это небезопасный способ, но он работает:


package main

import (
"unsafe"
)

func main() {
str := "Hello, Go!"
addr := unsafe.StringData(str)
println(addr, string(*addr))
}


2. Использование reflect с версии Go 1.23

Начиная с версии Go 1.23, метод reflect.Value.UnsafePointer позволяет получить адреса байтов строки:


package main

import (
"reflect"
)

func main() {
str := "Hello, Go!"
addr := (*byte)(reflect.ValueOf(str).UnsafePointer())
println(addr, string(*addr))
}


3. Конвертация строки в срез байтов. С версии Go 1.22 была добавлена оптимизация, которая позволяет конвертировать строки в срезы байтов без копирования памяти, если байты не будут изменяться. Это позволяет безопасно получать адреса байтов строки:


package main

func main() {
str := "Hello, Go!"
byteSlice := []byte(str)
addr := &byteSlice[0]
println(addr, string(*addr))
}

BY Библиотека Go для собеса | вопросы с собеседований


Share with your friend now:
tgoop.com/go_interview_lib/470

View MORE
Open in Telegram


Telegram News

Date: |

3How to create a Telegram channel? As the broader market downturn continues, yelling online has become the crypto trader’s latest coping mechanism after the rise of Goblintown Ethereum NFTs at the end of May and beginning of June, where holders made incoherent groaning sounds and role-played as urine-loving goblin creatures in late-night Twitter Spaces. best-secure-messaging-apps-shutterstock-1892950018.jpg Users are more open to new information on workdays rather than weekends. The imprisonment came as Telegram said it was "surprised" by claims that privacy commissioner Ada Chung Lai-ling is seeking to block the messaging app due to doxxing content targeting police and politicians.
from us


Telegram Библиотека Go для собеса | вопросы с собеседований
FROM American