mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-21 09:05:44 +00:00
Merge pull request #3859 from rw/go-zero-alloc-strings
Go: Fix heap allocation when reading a string.
This commit is contained in:
@@ -26,7 +26,8 @@ func (t *Table) Indirect(off UOffsetT) UOffsetT {
|
|||||||
|
|
||||||
// String gets a string from data stored inside the flatbuffer.
|
// String gets a string from data stored inside the flatbuffer.
|
||||||
func (t *Table) String(off UOffsetT) string {
|
func (t *Table) String(off UOffsetT) string {
|
||||||
return string(t.ByteVector(off))
|
b := t.ByteVector(off)
|
||||||
|
return byteSliceToString(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ByteVector gets a byte slice from data stored inside the flatbuffer.
|
// ByteVector gets a byte slice from data stored inside the flatbuffer.
|
||||||
|
|||||||
@@ -43,3 +43,8 @@ var (
|
|||||||
// SizeVOffsetT is the byte size of an VOffsetT.
|
// SizeVOffsetT is the byte size of an VOffsetT.
|
||||||
SizeVOffsetT = int(unsafe.Sizeof(VOffsetT(0)))
|
SizeVOffsetT = int(unsafe.Sizeof(VOffsetT(0)))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// byteSliceToString converts a []byte to string without a heap allocation.
|
||||||
|
func byteSliceToString(b []byte) string {
|
||||||
|
return *(*string)(unsafe.Pointer(&b))
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user