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"
|
||||
"strings"
|
||||
"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
|
||||
func CopyString(s string) string {
|
||||
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