diff --git a/src/idl_gen_go.cpp b/src/idl_gen_go.cpp index 48b643da6..3e204c597 100644 --- a/src/idl_gen_go.cpp +++ b/src/idl_gen_go.cpp @@ -675,7 +675,7 @@ static std::string GenGetter(const Type &type) { case BASE_TYPE_STRING: return "rcv._tab.ByteVector"; case BASE_TYPE_UNION: return "rcv._tab.Union"; case BASE_TYPE_VECTOR: return GenGetter(type.VectorType()); - default: return "rcv._tab.Get" + MakeCamel(GenTypeGet(type)); + default: return "rcv._tab.Get" + MakeCamel(GenTypeBasic(type)); } } @@ -711,6 +711,9 @@ static std::string GenTypePointer(const Type &type) { } static std::string GenTypeGet(const Type &type) { + if (type.enum_def != nullptr && !type.enum_def->is_union) { + return GetEnumTypeName(*type.enum_def); + } return IsScalar(type.base_type) ? GenTypeBasic(type) : GenTypePointer(type); } diff --git a/tests/MyGame/Example/Monster.go b/tests/MyGame/Example/Monster.go index 35514288f..7bf10ce61 100644 --- a/tests/MyGame/Example/Monster.go +++ b/tests/MyGame/Example/Monster.go @@ -97,7 +97,7 @@ func (rcv *Monster) InventoryBytes() []byte { return nil } -func (rcv *Monster) Color() int8 { +func (rcv *Monster) Color() Color { o := flatbuffers.UOffsetT(rcv._tab.Offset(16)) if o != 0 { return rcv._tab.GetInt8(o + rcv._tab.Pos) @@ -105,7 +105,7 @@ func (rcv *Monster) Color() int8 { return 8 } -func (rcv *Monster) MutateColor(n int8) bool { +func (rcv *Monster) MutateColor(n Color) bool { return rcv._tab.MutateInt8Slot(16, n) } diff --git a/tests/MyGame/Example/TestSimpleTableWithEnum.go b/tests/MyGame/Example/TestSimpleTableWithEnum.go index 559cd1f41..cf9da5e9d 100644 --- a/tests/MyGame/Example/TestSimpleTableWithEnum.go +++ b/tests/MyGame/Example/TestSimpleTableWithEnum.go @@ -26,7 +26,7 @@ func (rcv *TestSimpleTableWithEnum) Table() flatbuffers.Table { return rcv._tab } -func (rcv *TestSimpleTableWithEnum) Color() int8 { +func (rcv *TestSimpleTableWithEnum) Color() Color { o := flatbuffers.UOffsetT(rcv._tab.Offset(4)) if o != 0 { return rcv._tab.GetInt8(o + rcv._tab.Pos) @@ -34,7 +34,7 @@ func (rcv *TestSimpleTableWithEnum) Color() int8 { return 2 } -func (rcv *TestSimpleTableWithEnum) MutateColor(n int8) bool { +func (rcv *TestSimpleTableWithEnum) MutateColor(n Color) bool { return rcv._tab.MutateInt8Slot(4, n) } diff --git a/tests/MyGame/Example/Vec3.go b/tests/MyGame/Example/Vec3.go index f18fc27b7..658bac7b1 100644 --- a/tests/MyGame/Example/Vec3.go +++ b/tests/MyGame/Example/Vec3.go @@ -47,10 +47,10 @@ func (rcv *Vec3) MutateTest1(n float64) bool { return rcv._tab.MutateFloat64(rcv._tab.Pos+flatbuffers.UOffsetT(16), n) } -func (rcv *Vec3) Test2() int8 { +func (rcv *Vec3) Test2() Color { return rcv._tab.GetInt8(rcv._tab.Pos + flatbuffers.UOffsetT(24)) } -func (rcv *Vec3) MutateTest2(n int8) bool { +func (rcv *Vec3) MutateTest2(n Color) bool { return rcv._tab.MutateInt8(rcv._tab.Pos+flatbuffers.UOffsetT(24), n) } diff --git a/tests/go_test.go b/tests/go_test.go index 946ba0453..6119be309 100644 --- a/tests/go_test.go +++ b/tests/go_test.go @@ -156,6 +156,10 @@ func CheckReadBuffer(buf []byte, offset flatbuffers.UOffsetT, fail func(string, fail(FailString("name", "MyMonster", got)) } + if got := monster.Color(); example.ColorBlue != got { + fail(FailString("color", example.ColorBlue, got)) + } + // initialize a Vec3 from Pos() vec := new(example.Vec3) vec = monster.Pos(vec) diff --git a/tests/namespace_test/NamespaceA/TableInFirstNS.go b/tests/namespace_test/NamespaceA/TableInFirstNS.go index 82f57c30c..2b2373c13 100644 --- a/tests/namespace_test/NamespaceA/TableInFirstNS.go +++ b/tests/namespace_test/NamespaceA/TableInFirstNS.go @@ -39,7 +39,7 @@ func (rcv *TableInFirstNS) FooTable(obj *TableInNestedNS) *TableInNestedNS { return nil } -func (rcv *TableInFirstNS) FooEnum() int8 { +func (rcv *TableInFirstNS) FooEnum() EnumInNestedNS { o := flatbuffers.UOffsetT(rcv._tab.Offset(6)) if o != 0 { return rcv._tab.GetInt8(o + rcv._tab.Pos) @@ -47,7 +47,7 @@ func (rcv *TableInFirstNS) FooEnum() int8 { return 0 } -func (rcv *TableInFirstNS) MutateFooEnum(n int8) bool { +func (rcv *TableInFirstNS) MutateFooEnum(n EnumInNestedNS) bool { return rcv._tab.MutateInt8Slot(6, n) }