THRIFT-2419 golang - Fix fmt.Errorf in generated code

Patch: Chris Bannister
diff --git a/compiler/cpp/src/generate/t_go_generator.cc b/compiler/cpp/src/generate/t_go_generator.cc
index 168ca88..a216c2b 100644
--- a/compiler/cpp/src/generate/t_go_generator.cc
+++ b/compiler/cpp/src/generate/t_go_generator.cc
@@ -2615,7 +2615,7 @@
         out <<
             indent() << "_, _, size, err := iprot.ReadMapBegin()" << endl <<
             indent() << "if err != nil {" << endl <<
-            indent() << "  return fmt.Errorf(\"error reading map begin: %s\")" << endl <<
+            indent() << "  return fmt.Errorf(\"error reading map begin: %s\", err)" << endl <<
             indent() << "}" << endl <<
             indent() << "tMap := make(" << type_to_go_type(orig_type) << ", size)" << endl <<
             indent() << prefix << eq << " " << (optional_field ? "&" : "") << "tMap" << endl;
@@ -2624,7 +2624,7 @@
         out <<
             indent() << "_, size, err := iprot.ReadSetBegin()" << endl <<
             indent() << "if err != nil {" << endl <<
-            indent() << "  return fmt.Errorf(\"error reading set begin: %s\")" << endl <<
+            indent() << "  return fmt.Errorf(\"error reading set begin: %s\", err)" << endl <<
             indent() << "}" << endl <<
             indent() << "tSet := make(map[" << type_to_go_key_type(t->get_elem_type()) << "]bool, size)" << endl <<
             indent() << prefix << eq << " " << (optional_field ? "&" : "") << "tSet" << endl;
@@ -2632,7 +2632,7 @@
         out <<
             indent() << "_, size, err := iprot.ReadListBegin()" << endl <<
             indent() << "if err != nil {" << endl <<
-            indent() << "  return fmt.Errorf(\"error reading list begin: %s\")" << endl <<
+            indent() << "  return fmt.Errorf(\"error reading list begin: %s\", err)" << endl <<
             indent() << "}" << endl <<
             indent() << "tSlice := make(" << type_to_go_type(orig_type) << ", 0, size)" << endl <<
             indent() << prefix << eq << " " << (optional_field ? "&" : "") << "tSlice" << endl;
@@ -2664,17 +2664,17 @@
     if (ttype->is_map()) {
         out <<
             indent() << "if err := iprot.ReadMapEnd(); err != nil {" << endl <<
-            indent() << "  return fmt.Errorf(\"error reading map end: %s\")" << endl <<
+            indent() << "  return fmt.Errorf(\"error reading map end: %s\", err)" << endl <<
             indent() << "}" << endl;
     } else if (ttype->is_set()) {
         out <<
             indent() << "if err := iprot.ReadSetEnd(); err != nil {" << endl <<
-            indent() << "  return fmt.Errorf(\"error reading set end: %s\")" << endl <<
+            indent() << "  return fmt.Errorf(\"error reading set end: %s\", err)" << endl <<
             indent() << "}" << endl;
     } else if (ttype->is_list()) {
         out <<
             indent() << "if err := iprot.ReadListEnd(); err != nil {" << endl <<
-            indent() << "  return fmt.Errorf(\"error reading list end: %s\")" << endl <<
+            indent() << "  return fmt.Errorf(\"error reading list end: %s\", err)" << endl <<
             indent() << "}" << endl;
     }
 }
@@ -2857,21 +2857,21 @@
             type_to_enum(((t_map*)ttype)->get_key_type()) << ", " <<
             type_to_enum(((t_map*)ttype)->get_val_type()) << ", " <<
             "len(" << prefix << ")); err != nil {" << endl <<
-            indent() << "  return fmt.Errorf(\"error writing map begin: %s\")" << endl <<
+            indent() << "  return fmt.Errorf(\"error writing map begin: %s\", err)" << endl <<
             indent() << "}" << endl;
     } else if (ttype->is_set()) {
         out <<
             indent() << "if err := oprot.WriteSetBegin(" <<
             type_to_enum(((t_set*)ttype)->get_elem_type()) << ", " <<
             "len(" << prefix << ")); err != nil {" << endl <<
-            indent() << "  return fmt.Errorf(\"error writing set begin: %s\")" << endl <<
+            indent() << "  return fmt.Errorf(\"error writing set begin: %s\", err)" << endl <<
             indent() << "}" << endl;
     } else if (ttype->is_list()) {
         out <<
             indent() << "if err := oprot.WriteListBegin(" <<
             type_to_enum(((t_list*)ttype)->get_elem_type()) << ", " <<
             "len(" << prefix << ")); err != nil {" << endl <<
-            indent() << "  return fmt.Errorf(\"error writing list begin: %s\")" << endl <<
+            indent() << "  return fmt.Errorf(\"error writing list begin: %s\", err)" << endl <<
             indent() << "}" << endl;
     } else {
         throw "compiler error: Invalid type in generate_serialize_container '" + ttype->get_name() + "' for prefix '" + prefix + "'";
@@ -2907,17 +2907,17 @@
     if (ttype->is_map()) {
         out <<
             indent() << "if err := oprot.WriteMapEnd(); err != nil {" << endl <<
-            indent() << "  return fmt.Errorf(\"error writing map end: %s\")" << endl <<
+            indent() << "  return fmt.Errorf(\"error writing map end: %s\", err)" << endl <<
             indent() << "}" << endl;
     } else if (ttype->is_set()) {
         out <<
             indent() << "if err := oprot.WriteSetEnd(); err != nil {" << endl <<
-            indent() << "  return fmt.Errorf(\"error writing set end: %s\")" << endl <<
+            indent() << "  return fmt.Errorf(\"error writing set end: %s\", err)" << endl <<
             indent() << "}" << endl;
     } else if (ttype->is_list()) {
         out <<
             indent() << "if err := oprot.WriteListEnd(); err != nil {" << endl <<
-            indent() << "  return fmt.Errorf(\"error writing list end: %s\")" << endl <<
+            indent() << "  return fmt.Errorf(\"error writing list end: %s\", err)" << endl <<
             indent() << "}" << endl;
     }
 }