refactor(utils): add unified b2s/s2b conversion functions
Extract duplicate b2s/s2b functions from proxy/utils.go into internal/utils/bytes.go. These are zero-allocation unsafe conversions for byte slice <-> string conversion. - Create utils.B2s() and utils.S2b() as unified implementations - Update proxy/utils.go to call utils functions - Add safety documentation about shared memory warning Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
3b2360162c
commit
a28c7ebcf1
@ -2,27 +2,22 @@ package proxy
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"unsafe"
|
|
||||||
|
"rua.plus/lolly/internal/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
// b2s converts byte slice to string without allocation.
|
// b2s converts byte slice to string without allocation.
|
||||||
// WARNING: The returned string shares memory with the original slice.
|
// WARNING: The returned string shares memory with the original slice.
|
||||||
// Do not modify the slice after calling this function.
|
// Do not modify the slice after calling this function.
|
||||||
func b2s(b []byte) string {
|
func b2s(b []byte) string {
|
||||||
if len(b) == 0 {
|
return utils.B2s(b)
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return unsafe.String(&b[0], len(b))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// s2b converts string to byte slice without allocation.
|
// s2b converts string to byte slice without allocation.
|
||||||
// WARNING: The returned slice shares memory with the original string.
|
// WARNING: The returned slice shares memory with the original string.
|
||||||
// Do not modify the slice contents.
|
// Do not modify the slice contents.
|
||||||
func s2b(s string) []byte {
|
func s2b(s string) []byte {
|
||||||
if s == "" {
|
return utils.S2b(s)
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return unsafe.Slice(unsafe.StringData(s), len(s))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// isInWhitelist checks if a header key is in the whitelist.
|
// isInWhitelist checks if a header key is in the whitelist.
|
||||||
|
|||||||
23
internal/utils/bytes.go
Normal file
23
internal/utils/bytes.go
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import "unsafe"
|
||||||
|
|
||||||
|
// B2s converts byte slice to string without allocation.
|
||||||
|
// WARNING: The returned string shares memory with the original slice.
|
||||||
|
// Do not modify the slice after calling this function.
|
||||||
|
func B2s(b []byte) string {
|
||||||
|
if len(b) == 0 {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return unsafe.String(&b[0], len(b))
|
||||||
|
}
|
||||||
|
|
||||||
|
// S2b converts string to byte slice without allocation.
|
||||||
|
// WARNING: The returned slice shares memory with the original string.
|
||||||
|
// Do not modify the slice contents.
|
||||||
|
func S2b(s string) []byte {
|
||||||
|
if s == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return unsafe.Slice(unsafe.StringData(s), len(s))
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user