diff --git a/tests/MyGame/Example/StructOfStructsOfStructs.go b/tests/MyGame/Example/StructOfStructsOfStructs.go
new file mode 100644
index 0000000..b8f32a0
--- /dev/null
+++ b/tests/MyGame/Example/StructOfStructsOfStructs.go
@@ -0,0 +1,63 @@
+// Code generated by the FlatBuffers compiler. DO NOT EDIT.
+
+package Example
+
+import (
+	flatbuffers "github.com/google/flatbuffers/go"
+)
+
+type StructOfStructsOfStructsT struct {
+	A *StructOfStructsT `json:"a"`
+}
+
+func (t *StructOfStructsOfStructsT) Pack(builder *flatbuffers.Builder) flatbuffers.UOffsetT {
+	if t == nil { return 0 }
+	return CreateStructOfStructsOfStructs(builder, t.A.A.Id, t.A.A.Distance, t.A.B.A, t.A.B.B, t.A.C.Id, t.A.C.Distance)
+}
+func (rcv *StructOfStructsOfStructs) UnPackTo(t *StructOfStructsOfStructsT) {
+	t.A = rcv.A(nil).UnPack()
+}
+
+func (rcv *StructOfStructsOfStructs) UnPack() *StructOfStructsOfStructsT {
+	if rcv == nil { return nil }
+	t := &StructOfStructsOfStructsT{}
+	rcv.UnPackTo(t)
+	return t
+}
+
+type StructOfStructsOfStructs struct {
+	_tab flatbuffers.Struct
+}
+
+func (rcv *StructOfStructsOfStructs) Init(buf []byte, i flatbuffers.UOffsetT) {
+	rcv._tab.Bytes = buf
+	rcv._tab.Pos = i
+}
+
+func (rcv *StructOfStructsOfStructs) Table() flatbuffers.Table {
+	return rcv._tab.Table
+}
+
+func (rcv *StructOfStructsOfStructs) A(obj *StructOfStructs) *StructOfStructs {
+	if obj == nil {
+		obj = new(StructOfStructs)
+	}
+	obj.Init(rcv._tab.Bytes, rcv._tab.Pos+0)
+	return obj
+}
+
+func CreateStructOfStructsOfStructs(builder *flatbuffers.Builder, a_a_id uint32, a_a_distance uint32, a_b_a int16, a_b_b int8, a_c_id uint32, a_c_distance uint32) flatbuffers.UOffsetT {
+	builder.Prep(4, 20)
+	builder.Prep(4, 20)
+	builder.Prep(4, 8)
+	builder.PrependUint32(a_c_distance)
+	builder.PrependUint32(a_c_id)
+	builder.Prep(2, 4)
+	builder.Pad(1)
+	builder.PrependInt8(a_b_b)
+	builder.PrependInt16(a_b_a)
+	builder.Prep(4, 8)
+	builder.PrependUint32(a_a_distance)
+	builder.PrependUint32(a_a_id)
+	return builder.Offset()
+}
