diff --git a/src/Luban.Job.Proto/Source/Generate/GoRender.cs b/src/Luban.Job.Proto/Source/Generate/GoRender.cs
new file mode 100644
index 0000000..2a85e5e
--- /dev/null
+++ b/src/Luban.Job.Proto/Source/Generate/GoRender.cs
@@ -0,0 +1,14 @@
+using Luban.Job.Common.Generate;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Luban.Job.Proto.Generate
+{
+ [Render("go")]
+ class GoRender : TemplateRenderBase
+ {
+ }
+}
diff --git a/src/Luban.Job.Proto/Source/Generate/TemplateRenderBase.cs b/src/Luban.Job.Proto/Source/Generate/TemplateRenderBase.cs
index 36dd4fb..10fc8d9 100644
--- a/src/Luban.Job.Proto/Source/Generate/TemplateRenderBase.cs
+++ b/src/Luban.Job.Proto/Source/Generate/TemplateRenderBase.cs
@@ -18,7 +18,6 @@ namespace Luban.Job.Proto.Generate
{
var template = StringTemplateUtil.GetTemplate($"common/{RenderTemplateDir}/enum");
var result = template.Render(e);
-
return result;
}
@@ -26,7 +25,6 @@ namespace Luban.Job.Proto.Generate
{
var template = StringTemplateUtil.GetTemplate($"proto/{RenderTemplateDir}/bean");
var result = template.RenderCode(b);
-
return result;
}
@@ -34,7 +32,6 @@ namespace Luban.Job.Proto.Generate
{
var template = StringTemplateUtil.GetTemplate($"proto/{RenderTemplateDir}/proto");
var result = template.RenderCode(p);
-
return result;
}
@@ -42,7 +39,6 @@ namespace Luban.Job.Proto.Generate
{
var template = StringTemplateUtil.GetTemplate($"proto/{RenderTemplateDir}/rpc");
var result = template.RenderCode(r);
-
return result;
}
diff --git a/src/Luban.Server/Luban.Server.csproj b/src/Luban.Server/Luban.Server.csproj
index efc58c0..c3eece8 100644
--- a/src/Luban.Server/Luban.Server.csproj
+++ b/src/Luban.Server/Luban.Server.csproj
@@ -251,6 +251,18 @@
PreserveNewest
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
PreserveNewest
diff --git a/src/Luban.Server/Templates/proto/go/bean.tpl b/src/Luban.Server/Templates/proto/go/bean.tpl
new file mode 100644
index 0000000..f1788dd
--- /dev/null
+++ b/src/Luban.Server/Templates/proto/go/bean.tpl
@@ -0,0 +1,73 @@
+{{-
+ go_full_name = x.go_full_name
+ parent_def_type = x.parent_def_type
+ is_abstract_type = x.is_abstract_type
+ export_fields = x.export_fields
+ hierarchy_not_abstract_children = x.hierarchy_not_abstract_children
+-}}
+
+package {{x.top_module}}
+
+import (
+ "bright/serialization"
+)
+
+{{x.go_bin_import}}
+
+type {{go_full_name}} struct {
+ {{~if parent_def_type~}}
+ {{parent_def_type.go_full_name}}
+ {{~end~}}
+ {{~for field in export_fields ~}}
+ {{field.convention_name}} {{go_define_type field.ctype}}
+ {{~end~}}
+}
+
+{{~if !is_abstract_type~}}
+func ({{go_full_name}}) GetTypeId() int {
+ return {{x.id}}
+}
+{{~end~}}
+
+{{~if is_abstract_type~}}
+func New{{go_full_name}}(_buf *serialization.ByteBuf) (_v interface{}, err error) {
+ var id int32
+ if id, err = _buf.ReadInt() ; err != nil {
+ return
+ }
+ switch id {
+ {{~for child in hierarchy_not_abstract_children~}}
+ case {{child.id}}: return New{{child.go_full_name}}(_buf)
+ {{~end~}}
+ default: return nil, errors.New("unknown type id")
+ }
+ return
+}
+
+func New{{go_full_name}}_Body(_buf *serialization.ByteBuf) (_v *{{go_full_name}}, err error) {
+ _v = &{{go_full_name}}{}
+{{~if parent_def_type~}}
+ var _p *{{parent_def_type.go_full_name}}
+ if _p, err = New{{parent_def_type.go_full_name}}_Body(_buf) ; err != nil { return }
+ _v.{{parent_def_type.go_full_name}} = *_p
+{{~end~}}
+ {{~for field in export_fields ~}}
+ {{go_deserialize_field field.ctype ("_v." + field.convention_name) '_buf'}}
+ {{~end~}}
+ return
+}
+
+{{~else~}}
+func New{{go_full_name}}(_buf *serialization.ByteBuf) (_v *{{go_full_name}}, err error) {
+ _v = &{{go_full_name}}{}
+{{~if parent_def_type~}}
+ var _p *{{parent_def_type.go_full_name}}
+ if _p, err = New{{parent_def_type.go_full_name}}_Body(_buf) ; err != nil { return }
+ _v.{{parent_def_type.go_full_name}} = *_p
+{{~end~}}
+ {{~for field in export_fields ~}}
+ {{go_deserialize_field field.ctype ("_v." + field.convention_name) '_buf'}}
+ {{~end~}}
+ return
+}
+{{~end~}}
diff --git a/src/Luban.Server/Templates/proto/go/proto.tpl b/src/Luban.Server/Templates/proto/go/proto.tpl
new file mode 100644
index 0000000..f1788dd
--- /dev/null
+++ b/src/Luban.Server/Templates/proto/go/proto.tpl
@@ -0,0 +1,73 @@
+{{-
+ go_full_name = x.go_full_name
+ parent_def_type = x.parent_def_type
+ is_abstract_type = x.is_abstract_type
+ export_fields = x.export_fields
+ hierarchy_not_abstract_children = x.hierarchy_not_abstract_children
+-}}
+
+package {{x.top_module}}
+
+import (
+ "bright/serialization"
+)
+
+{{x.go_bin_import}}
+
+type {{go_full_name}} struct {
+ {{~if parent_def_type~}}
+ {{parent_def_type.go_full_name}}
+ {{~end~}}
+ {{~for field in export_fields ~}}
+ {{field.convention_name}} {{go_define_type field.ctype}}
+ {{~end~}}
+}
+
+{{~if !is_abstract_type~}}
+func ({{go_full_name}}) GetTypeId() int {
+ return {{x.id}}
+}
+{{~end~}}
+
+{{~if is_abstract_type~}}
+func New{{go_full_name}}(_buf *serialization.ByteBuf) (_v interface{}, err error) {
+ var id int32
+ if id, err = _buf.ReadInt() ; err != nil {
+ return
+ }
+ switch id {
+ {{~for child in hierarchy_not_abstract_children~}}
+ case {{child.id}}: return New{{child.go_full_name}}(_buf)
+ {{~end~}}
+ default: return nil, errors.New("unknown type id")
+ }
+ return
+}
+
+func New{{go_full_name}}_Body(_buf *serialization.ByteBuf) (_v *{{go_full_name}}, err error) {
+ _v = &{{go_full_name}}{}
+{{~if parent_def_type~}}
+ var _p *{{parent_def_type.go_full_name}}
+ if _p, err = New{{parent_def_type.go_full_name}}_Body(_buf) ; err != nil { return }
+ _v.{{parent_def_type.go_full_name}} = *_p
+{{~end~}}
+ {{~for field in export_fields ~}}
+ {{go_deserialize_field field.ctype ("_v." + field.convention_name) '_buf'}}
+ {{~end~}}
+ return
+}
+
+{{~else~}}
+func New{{go_full_name}}(_buf *serialization.ByteBuf) (_v *{{go_full_name}}, err error) {
+ _v = &{{go_full_name}}{}
+{{~if parent_def_type~}}
+ var _p *{{parent_def_type.go_full_name}}
+ if _p, err = New{{parent_def_type.go_full_name}}_Body(_buf) ; err != nil { return }
+ _v.{{parent_def_type.go_full_name}} = *_p
+{{~end~}}
+ {{~for field in export_fields ~}}
+ {{go_deserialize_field field.ctype ("_v." + field.convention_name) '_buf'}}
+ {{~end~}}
+ return
+}
+{{~end~}}
diff --git a/src/Luban.Server/Templates/proto/go/rpc.tpl b/src/Luban.Server/Templates/proto/go/rpc.tpl
new file mode 100644
index 0000000..a73b61c
--- /dev/null
+++ b/src/Luban.Server/Templates/proto/go/rpc.tpl
@@ -0,0 +1 @@
+// rpc {{x.full_name}}
\ No newline at end of file
diff --git a/src/Luban.Server/Templates/proto/go/stub.tpl b/src/Luban.Server/Templates/proto/go/stub.tpl
new file mode 100644
index 0000000..d067d0b
--- /dev/null
+++ b/src/Luban.Server/Templates/proto/go/stub.tpl
@@ -0,0 +1 @@
+// stub
\ No newline at end of file