tgoop.com/go_interview_lib/470
Create:
Last Update:
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