mirror of https://github.com/gofiber/fiber.git
utils: add Go 1.20+ way of converting byte slice to string (#2468)
Ref.pull/2473/headd2f97fc426/b2s_old.go
. Ref.d2f97fc426/b2s_new.go
.
parent
182f9f0970
commit
fe487934f9
|
@ -10,16 +10,8 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
"unsafe"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// UnsafeString returns a string pointer without allocation
|
|
||||||
//
|
|
||||||
//nolint:gosec // unsafe is used for better performance here
|
|
||||||
func UnsafeString(b []byte) string {
|
|
||||||
return *(*string)(unsafe.Pointer(&b))
|
|
||||||
}
|
|
||||||
|
|
||||||
// CopyString copies a string to make it immutable
|
// CopyString copies a string to make it immutable
|
||||||
func CopyString(s string) string {
|
func CopyString(s string) string {
|
||||||
return string(UnsafeBytes(s))
|
return string(UnsafeBytes(s))
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
//go:build go1.20
|
||||||
|
// +build go1.20
|
||||||
|
|
||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
// UnsafeString returns a string pointer without allocation
|
||||||
|
func UnsafeString(b []byte) string {
|
||||||
|
return unsafe.String(unsafe.SliceData(b), len(b))
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
//go:build !go1.20
|
||||||
|
// +build !go1.20
|
||||||
|
|
||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
// UnsafeString returns a string pointer without allocation
|
||||||
|
//
|
||||||
|
//nolint:gosec // unsafe is used for better performance here
|
||||||
|
func UnsafeString(b []byte) string {
|
||||||
|
return *(*string)(unsafe.Pointer(&b))
|
||||||
|
}
|
Loading…
Reference in New Issue