From e8ac0f293e5e8a957e95c5ae72eefb0bf4d1be0e Mon Sep 17 00:00:00 2001 From: rw Date: Sat, 23 Apr 2016 12:31:24 -0700 Subject: [PATCH] Fix heap allocation when reading a string. --- go/table.go | 3 ++- go/unsafe.go | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/go/table.go b/go/table.go index 695b92da8..976a7dba1 100644 --- a/go/table.go +++ b/go/table.go @@ -26,7 +26,8 @@ func (t *Table) Indirect(off UOffsetT) UOffsetT { // String gets a string from data stored inside the flatbuffer. 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. diff --git a/go/unsafe.go b/go/unsafe.go index e90ccb09d..566e8b0bb 100644 --- a/go/unsafe.go +++ b/go/unsafe.go @@ -43,3 +43,8 @@ var ( // SizeVOffsetT is the byte size of an VOffsetT. 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)) +}