THRIFT-2420 Go argument parser for methods without arguments does not skip fields

Patch: Frank Schroeder & Jens Geyer
diff --git a/compiler/cpp/src/generate/t_go_generator.cc b/compiler/cpp/src/generate/t_go_generator.cc
index a216c2b..43def5d 100644
--- a/compiler/cpp/src/generate/t_go_generator.cc
+++ b/compiler/cpp/src/generate/t_go_generator.cc
@@ -1130,20 +1130,21 @@
     // Check for field STOP marker and break
     out <<
         indent() << "if fieldTypeId == thrift.STOP { break; }" << endl;
-    // Switch statement on the field we are reading
-    bool first = true;
+
     string thriftFieldTypeId;
     // Generate deserialization code for known cases
     int32_t field_id = -1;
 
+    // Switch statement on the field we are reading, false if no fields present
+    bool have_switch = !fields.empty();
+    if( have_switch) {
+        indent(out) << "switch fieldId {" << endl;
+    }
+    
+    // All the fields we know
     for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
         field_id = (*f_iter)->get_key();
 
-        if (first) {
-            first = false;
-            indent(out) << "switch fieldId {" << endl;
-        }
-
         // if negative id, ensure we generate a valid method name
         string field_method_prefix("ReadField");
 
@@ -1152,8 +1153,9 @@
             field_id *= -1;
         }
 
+        out << 
+            indent() <<"case " << field_id << ":" << endl;
         indent_up();
-        out << "case " << field_id << ":" << endl;
         thriftFieldTypeId = type_to_enum((*f_iter)->get_type());
 
         if (thriftFieldTypeId == "thrift.BINARY") {
@@ -1167,13 +1169,23 @@
         indent_down();
     }
 
-    // In the default case we skip the field
-    if (!first) {
+    // Begin switch default case 
+    if( have_switch) {
         out <<
-            indent() << "default:" << endl <<
-            indent() << "  if err := iprot.Skip(fieldTypeId); err != nil {" << endl <<
-            indent() << "    return err" << endl <<
-            indent() << "  }" << endl <<
+            indent() << "default:" << endl;
+            indent_up();
+    }
+            
+    // Skip unknown fields in either case
+    out <<
+        indent() << "if err := iprot.Skip(fieldTypeId); err != nil {" << endl <<
+        indent() << "  return err" << endl <<
+        indent() << "}" << endl;
+
+    // End switch default case
+    if( have_switch) {
+        indent_down();
+        out <<
             indent() << "}" << endl;
     }