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)) +}