go: Proper indent in compiler

This is a "trivial" change for go compiler to always use the combination
of indent_up, indent_down, and indent, over manual indentation (by
adding 2 spaces at the beginning of the string). Also change go
compiler's indent_str to tab over 2 spaces.

While I'm here, also made a few minor tweaks on generated go code.
diff --git a/compiler/cpp/src/thrift/generate/t_go_generator.cc b/compiler/cpp/src/thrift/generate/t_go_generator.cc
index 72a9f06..c135d64 100644
--- a/compiler/cpp/src/thrift/generate/t_go_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_go_generator.cc
@@ -785,46 +785,54 @@
   std::ostringstream to_string_mapping, from_string_mapping;
   std::string tenum_name(publicize(tenum->get_name()));
   generate_go_docstring(f_types_, tenum);
-  f_types_ << "type " << tenum_name << " int64" << '\n' << "const (" << '\n';
+  f_types_ << '\n' << "type " << tenum_name << " int64" << '\n' << "const (" << '\n';
 
   to_string_mapping << indent() << "func (p " << tenum_name << ") String() string {" << '\n';
-  to_string_mapping << indent() << "  switch p {" << '\n';
+  indent_up();
+  to_string_mapping << indent() << "switch p {" << '\n';
+  indent_down();
 
   from_string_mapping << indent() << "func " << tenum_name << "FromString(s string) (" << tenum_name
                       << ", error) {" << '\n';
-  from_string_mapping << indent() << "  switch s {" << '\n';
+  indent_up();
+  from_string_mapping << indent() << "switch s {" << '\n';
+  indent_down();
 
   vector<t_enum_value*> constants = tenum->get_constants();
   vector<t_enum_value*>::iterator c_iter;
   int value = -1;
 
+  indent_up();
   for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) {
     value = (*c_iter)->get_value();
 
     string iter_std_name(escape_string((*c_iter)->get_name()));
     string iter_name((*c_iter)->get_name());
-    f_types_ << indent() << "  " << tenum_name << "_" << iter_name << ' ' << tenum_name << " = "
+    f_types_ << indent() << tenum_name << "_" << iter_name << ' ' << tenum_name << " = "
              << value << '\n';
     // Dictionaries to/from string names of enums
-    to_string_mapping << indent() << "  case " << tenum_name << "_" << iter_name << ": return \""
+    to_string_mapping << indent() << "case " << tenum_name << "_" << iter_name << ": return \""
                       << iter_std_name << "\"" << '\n';
 
     if (iter_std_name != escape_string(iter_name)) {
-      from_string_mapping << indent() << "  case \"" << iter_std_name << "\", \""
+      from_string_mapping << indent() << "case \"" << iter_std_name << "\", \""
                           << escape_string(iter_name) << "\": return " << tenum_name << "_"
                           << iter_name << ", nil " << '\n';
     } else {
-      from_string_mapping << indent() << "  case \"" << iter_std_name << "\": return " << tenum_name
+      from_string_mapping << indent() << "case \"" << iter_std_name << "\": return " << tenum_name
                           << "_" << iter_name << ", nil " << '\n';
     }
   }
 
-  to_string_mapping << indent() << "  }" << '\n';
-  to_string_mapping << indent() << "  return \"<UNSET>\"" << '\n';
   to_string_mapping << indent() << "}" << '\n';
-  from_string_mapping << indent() << "  }" << '\n';
-  from_string_mapping << indent() << "  return " << tenum_name << "(0),"
+  to_string_mapping << indent() << "return \"<UNSET>\"" << '\n';
+  indent_down();
+  to_string_mapping << indent() << "}" << '\n';
+  indent_up();
+  from_string_mapping << indent() << "}" << '\n';
+  from_string_mapping << indent() << "return " << tenum_name << "(0),"
                       << " fmt.Errorf(\"not a valid " << tenum_name << " string\")" << '\n';
+  indent_down();
   from_string_mapping << indent() << "}" << '\n';
 
   f_types_ << ")" << '\n' << '\n' << to_string_mapping.str() << '\n' << from_string_mapping.str()
@@ -838,33 +846,49 @@
 
   // Generate MarshalText
   f_types_ << "func (p " << tenum_name << ") MarshalText() ([]byte, error) {" << '\n';
-  f_types_ << "return []byte(p.String()), nil" << '\n';
+  indent_up();
+  f_types_ << indent() << "return []byte(p.String()), nil" << '\n';
+  indent_down();
   f_types_ << "}" << '\n' << '\n';
 
   // Generate UnmarshalText
   f_types_ << "func (p *" << tenum_name << ") UnmarshalText(text []byte) error {" << '\n';
-  f_types_ << "q, err := " << tenum_name << "FromString(string(text))" << '\n';
-  f_types_ << "if (err != nil) {" << '\n' << "return err" << '\n' << "}" << '\n';
-  f_types_ << "*p = q" << '\n';
-  f_types_ << "return nil" << '\n';
+  indent_up();
+  f_types_ << indent() << "q, err := " << tenum_name << "FromString(string(text))" << '\n';
+  f_types_ << indent() << "if err != nil {" << '\n';
+  indent_up();
+  f_types_ << indent() << "return err" << '\n';
+  indent_down();
+  f_types_ << indent() << "}" << '\n';
+  f_types_ << indent() << "*p = q" << '\n';
+  f_types_ << indent() << "return nil" << '\n';
+  indent_down();
   f_types_ << "}" << '\n' << '\n';
 
   // Generate Scan for sql.Scanner interface
   f_types_ << "func (p *" << tenum_name << ") Scan(value interface{}) error {" << '\n';
-  f_types_ << "v, ok := value.(int64)" << '\n';
-  f_types_ << "if !ok {" << '\n';
-  f_types_ << "return errors.New(\"Scan value is not int64\")" << '\n';
-  f_types_ << "}" << '\n';
-  f_types_ << "*p = " << tenum_name << "(v)" << '\n';
-  f_types_ << "return nil" << '\n';
+  indent_up();
+  f_types_ << indent() << "v, ok := value.(int64)" << '\n';
+  f_types_ << indent() << "if !ok {" << '\n';
+  indent_up();
+  f_types_ << indent() << "return errors.New(\"Scan value is not int64\")" << '\n';
+  indent_down();
+  f_types_ << indent() << "}" << '\n';
+  f_types_ << indent() << "*p = " << tenum_name << "(v)" << '\n';
+  f_types_ << indent() << "return nil" << '\n';
+  indent_down();
   f_types_ << "}" << '\n' << '\n';
 
   // Generate Value for driver.Valuer interface
-  f_types_ << "func (p * " << tenum_name << ") Value() (driver.Value, error) {" << '\n';
-  f_types_ << "  if p == nil {" << '\n';
-  f_types_ << "    return nil, nil" << '\n';
-  f_types_ << "  }" << '\n';
-  f_types_ << "return int64(*p), nil" << '\n';
+  f_types_ << "func (p *" << tenum_name << ") Value() (driver.Value, error) {" << '\n';
+  indent_up();
+  f_types_ << indent() << "if p == nil {" << '\n';
+  indent_up();
+  f_types_ << indent() << "return nil, nil" << '\n';
+  indent_down();
+  f_types_ << indent() << "}" << '\n';
+  f_types_ << indent() << "return int64(*p), nil" << '\n';
+  indent_down();
   f_types_ << "}" << '\n';
 
 }
@@ -1330,6 +1354,7 @@
       }
       out << '\n';
     }
+    out << '\n';
 
     // num_setable is used for deciding if Count* methods will be generated for union fields.
     // This applies to all nullable fields including slices (used for set, list and binary) and maps, not just pointers.
@@ -1521,8 +1546,10 @@
       << '\n';
   indent_up();
   out << indent() << "if _, err := iprot.ReadStructBegin(ctx); err != nil {" << '\n';
-  out << indent() << "  return thrift.PrependError(fmt.Sprintf(\"%T read error: \", p), err)"
+  indent_up();
+  out << indent() << "return thrift.PrependError(fmt.Sprintf(\"%T read error: \", p), err)"
       << '\n';
+  indent_down();
   out << indent() << "}" << '\n' << '\n';
 
   // Required variables does not have IsSet functions, so we need tmp vars to check them.
@@ -1540,11 +1567,17 @@
   // Read beginning field marker
   out << indent() << "_, fieldTypeId, fieldId, err := iprot.ReadFieldBegin(ctx)" << '\n';
   out << indent() << "if err != nil {" << '\n';
-  out << indent() << "  return thrift.PrependError(fmt.Sprintf("
+  indent_up();
+  out << indent() << "return thrift.PrependError(fmt.Sprintf("
                      "\"%T field %d read error: \", p, fieldId), err)" << '\n';
+  indent_down();
   out << indent() << "}" << '\n';
   // Check for field STOP marker and break
-  out << indent() << "if fieldTypeId == thrift.STOP { break; }" << '\n';
+  out << indent() << "if fieldTypeId == thrift.STOP {" << '\n';
+  indent_up();
+  out << indent() << "break" << '\n';
+  indent_down();
+  out << indent() << "}" << '\n';
 
   string thriftFieldTypeId;
   // Generate deserialization code for known cases
@@ -1578,21 +1611,29 @@
     }
 
     out << indent() << "if fieldTypeId == " << thriftFieldTypeId << " {" << '\n';
-    out << indent() << "  if err := p." << field_method_prefix << field_method_suffix << "(ctx, iprot); err != nil {"
+    indent_up();
+    out << indent() << "if err := p." << field_method_prefix << field_method_suffix << "(ctx, iprot); err != nil {"
         << '\n';
-    out << indent() << "    return err" << '\n';
-    out << indent() << "  }" << '\n';
+    indent_up();
+    out << indent() << "return err" << '\n';
+    indent_down();
+    out << indent() << "}" << '\n';
 
     // Mark required field as read
     if ((*f_iter)->get_req() == t_field::T_REQUIRED) {
       const string field_name(publicize(escape_string((*f_iter)->get_name())));
-      out << indent() << "  isset" << field_name << " = true" << '\n';
+      out << indent() << "isset" << field_name << " = true" << '\n';
     }
 
+    indent_down();
     out << indent() << "} else {" << '\n';
-    out << indent() << "  if err := iprot.Skip(ctx, fieldTypeId); err != nil {" << '\n';
-    out << indent() << "    return err" << '\n';
-    out << indent() << "  }" << '\n';
+    indent_up();
+    out << indent() << "if err := iprot.Skip(ctx, fieldTypeId); err != nil {" << '\n';
+    indent_up();
+    out << indent() << "return err" << '\n';
+    indent_down();
+    out << indent() << "}" << '\n';
+    indent_down();
     out << indent() << "}" << '\n';
 
 
@@ -1607,7 +1648,9 @@
 
   // Skip unknown fields in either case
   out << indent() << "if err := iprot.Skip(ctx, fieldTypeId); err != nil {" << '\n';
-  out << indent() << "  return err" << '\n';
+  indent_up();
+  out << indent() << "return err" << '\n';
+  indent_down();
   out << indent() << "}" << '\n';
 
   // End switch default case
@@ -1618,13 +1661,17 @@
 
   // Read field end marker
   out << indent() << "if err := iprot.ReadFieldEnd(ctx); err != nil {" << '\n';
-  out << indent() << "  return err" << '\n';
+  indent_up();
+  out << indent() << "return err" << '\n';
+  indent_down();
   out << indent() << "}" << '\n';
   indent_down();
   out << indent() << "}" << '\n';
   out << indent() << "if err := iprot.ReadStructEnd(ctx); err != nil {" << '\n';
-  out << indent() << "  return thrift.PrependError(fmt.Sprintf("
+  indent_up();
+  out << indent() << "return thrift.PrependError(fmt.Sprintf("
                      "\"%T read struct end error: \", p), err)" << '\n';
+  indent_down();
   out << indent() << "}" << '\n';
 
   // Return error if any required fields are missing.
@@ -1632,8 +1679,10 @@
     if ((*f_iter)->get_req() == t_field::T_REQUIRED) {
       const string field_name(publicize(escape_string((*f_iter)->get_name())));
       out << indent() << "if !isset" << field_name << "{" << '\n';
-      out << indent() << "  return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, "
+      indent_up();
+      out << indent() << "return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, "
                          "fmt.Errorf(\"Required field " << field_name << " is not set\"));" << '\n';
+      indent_down();
       out << indent() << "}" << '\n';
     }
   }
@@ -1654,12 +1703,12 @@
       field_method_suffix *= -1;
     }
 
-    out << indent() << "func (p *" << tstruct_name << ")  " << field_method_prefix << field_method_suffix
+    out << indent() << "func (p *" << tstruct_name << ") " << field_method_prefix << field_method_suffix
         << "(ctx context.Context, iprot thrift.TProtocol) error {" << '\n';
     indent_up();
     generate_deserialize_field(out, *f_iter, false, "p.");
+    out << indent() << "return nil" << '\n';
     indent_down();
-    out << indent() << "  return nil" << '\n';
     out << indent() << "}" << '\n' << '\n';
   }
 }
@@ -1677,14 +1726,18 @@
   indent_up();
   if (tstruct->is_union() && uses_countsetfields) {
     std::string tstruct_name(publicize(tstruct->get_name()));
-    out << indent() << "if c := p.CountSetFields" << tstruct_name << "(); c != 1 {" << '\n'
-        << indent()
-        << "  return fmt.Errorf(\"%T write union: exactly one field must be set (%d set)\", p, c)"
-        << '\n' << indent() << "}" << '\n';
+    out << indent() << "if c := p.CountSetFields" << tstruct_name << "(); c != 1 {" << '\n';
+    indent_up();
+    out << indent() << "return fmt.Errorf(\"%T write union: exactly one field must be set (%d set)\", p, c)" << '\n';
+    indent_down();
+    out << indent() << "}" << '\n';
   }
   out << indent() << "if err := oprot.WriteStructBegin(ctx, \"" << name << "\"); err != nil {" << '\n';
-  out << indent() << "  return thrift.PrependError(fmt.Sprintf("
-                     "\"%T write struct begin error: \", p), err) }" << '\n';
+  indent_up();
+  out << indent() << "return thrift.PrependError(fmt.Sprintf("
+                     "\"%T write struct begin error: \", p), err)" << '\n';
+  indent_down();
+  out << indent() << "}" << '\n';
 
   string field_name;
   string escape_field_name;
@@ -1716,9 +1769,15 @@
 
   // Write the struct map
   out << indent() << "if err := oprot.WriteFieldStop(ctx); err != nil {" << '\n';
-  out << indent() << "  return thrift.PrependError(\"write field stop error: \", err) }" << '\n';
+  indent_up();
+  out << indent() << "return thrift.PrependError(\"write field stop error: \", err)" << '\n';
+  indent_down();
+  out << indent() << "}" << '\n';
   out << indent() << "if err := oprot.WriteStructEnd(ctx); err != nil {" << '\n';
-  out << indent() << "  return thrift.PrependError(\"write struct stop error: \", err) }" << '\n';
+  indent_up();
+  out << indent() << "return thrift.PrependError(\"write struct stop error: \", err)" << '\n';
+  indent_down();
+  out << indent() << "}" << '\n';
   out << indent() << "return nil" << '\n';
   indent_down();
   out << indent() << "}" << '\n' << '\n';
@@ -1748,24 +1807,30 @@
 
     out << indent() << "if err := oprot.WriteFieldBegin(ctx, \"" << escape_field_name << "\", "
         << type_to_enum((*f_iter)->get_type()) << ", " << field_id << "); err != nil {" << '\n';
-    out << indent() << "  return thrift.PrependError(fmt.Sprintf(\"%T write field begin error "
-        << field_id << ":" << escape_field_name << ": \", p), err) }" << '\n';
+    indent_up();
+    out << indent() << "return thrift.PrependError(fmt.Sprintf(\"%T write field begin error "
+        << field_id << ":" << escape_field_name << ": \", p), err)" << '\n';
+    indent_down();
+    out << indent() << "}" << '\n';
 
     // Write field contents
     generate_serialize_field(out, *f_iter, "p.");
 
     // Write field closer
     out << indent() << "if err := oprot.WriteFieldEnd(ctx); err != nil {" << '\n';
-    out << indent() << "  return thrift.PrependError(fmt.Sprintf(\"%T write field end error "
-        << field_id << ":" << escape_field_name << ": \", p), err) }" << '\n';
+    indent_up();
+    out << indent() << "return thrift.PrependError(fmt.Sprintf(\"%T write field end error "
+        << field_id << ":" << escape_field_name << ": \", p), err)" << '\n';
+    indent_down();
+    out << indent() << "}" << '\n';
 
     if (field_required == t_field::T_OPTIONAL) {
       indent_down();
       out << indent() << "}" << '\n';
     }
 
+    out << indent() << "return err" << '\n';
     indent_down();
-    out << indent() << "  return err" << '\n';
     out << indent() << "}" << '\n' << '\n';
   }
 }
@@ -1906,12 +1971,14 @@
     extends = type_name(tservice->get_extends());
     size_t index = extends.rfind(".");
 
+    indent_up();
     if (index != string::npos) {
-      extends_if = "\n" + indent() + "  " + extends.substr(0, index + 1)
+      extends_if = "\n" + indent() + extends.substr(0, index + 1)
                    + publicize(extends.substr(index + 1)) + "\n";
     } else {
       extends_if = "\n" + indent() + publicize(extends) + "\n";
     }
+    indent_down();
   }
 
   f_types_ << indent() << "type " << interfaceName << " interface {" << extends_if;
@@ -2233,16 +2300,17 @@
   f_remote << indent() << unused_protection; // filled in render_included_programs()
   f_remote << indent() << '\n';
   f_remote << indent() << "func Usage() {" << '\n';
-  f_remote << indent() << "  fmt.Fprintln(os.Stderr, \"Usage of \", os.Args[0], \" "
+  indent_up();
+  f_remote << indent() << "fmt.Fprintln(os.Stderr, \"Usage of \", os.Args[0], \" "
                           "[-h host:port] [-u url] [-f[ramed]] function [arg1 [arg2...]]:\")"
            << '\n';
-  f_remote << indent() << "  flag.PrintDefaults()" << '\n';
-  f_remote << indent() << "  fmt.Fprintln(os.Stderr, \"\\nFunctions:\")" << '\n';
+  f_remote << indent() << "flag.PrintDefaults()" << '\n';
+  f_remote << indent() << "fmt.Fprintln(os.Stderr, \"\\nFunctions:\")" << '\n';
 
   string package_name_aliased = package_identifiers_[get_real_go_module(program_)];
 
   for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
-    f_remote << "  fmt.Fprintln(os.Stderr, \"  " << (*f_iter)->get_returntype()->get_name() << " "
+    f_remote << indent() << "fmt.Fprintln(os.Stderr, \"  " << (*f_iter)->get_returntype()->get_name() << " "
              << (*f_iter)->get_name() << "(";
     t_struct* arg_struct = (*f_iter)->get_arglist();
     const std::vector<t_field*>& args = arg_struct->get_members();
@@ -2262,25 +2330,32 @@
     f_remote << ")\")" << '\n';
   }
 
-  f_remote << indent() << "  fmt.Fprintln(os.Stderr)" << '\n';
-  f_remote << indent() << "  os.Exit(0)" << '\n';
+  f_remote << indent() << "fmt.Fprintln(os.Stderr)" << '\n';
+  f_remote << indent() << "os.Exit(0)" << '\n';
+  indent_down();
   f_remote << indent() << "}" << '\n';
   f_remote << indent() << '\n';
 
   f_remote << indent() << "type httpHeaders map[string]string" << '\n';
   f_remote << indent() << '\n';
   f_remote << indent() << "func (h httpHeaders) String() string {" << '\n';
-  f_remote << indent() << "  var m map[string]string = h" << '\n';
-  f_remote << indent() << "  return fmt.Sprintf(\"%s\", m)" << '\n';
+  indent_up();
+  f_remote << indent() << "var m map[string]string = h" << '\n';
+  f_remote << indent() << "return fmt.Sprintf(\"%s\", m)" << '\n';
+  indent_down();
   f_remote << indent() << "}" << '\n';
   f_remote << indent() << '\n';
   f_remote << indent() << "func (h httpHeaders) Set(value string) error {" << '\n';
-  f_remote << indent() << "  parts := strings.Split(value, \": \")" << '\n';
-  f_remote << indent() << "  if len(parts) != 2 {" << '\n';
-  f_remote << indent() << "    return fmt.Errorf(\"header should be of format 'Key: Value'\")" << '\n';
-  f_remote << indent() << "  }" << '\n';
-  f_remote << indent() << "  h[parts[0]] = parts[1]" << '\n';
-  f_remote << indent() << "  return nil" << '\n';
+  indent_up();
+  f_remote << indent() << "parts := strings.Split(value, \": \")" << '\n';
+  f_remote << indent() << "if len(parts) != 2 {" << '\n';
+  indent_up();
+  f_remote << indent() << "return fmt.Errorf(\"header should be of format 'Key: Value'\")" << '\n';
+  indent_down();
+  f_remote << indent() << "}" << '\n';
+  f_remote << indent() << "h[parts[0]] = parts[1]" << '\n';
+  f_remote << indent() << "return nil" << '\n';
+  indent_down();
   f_remote << indent() << "}" << '\n';
   f_remote << indent() << '\n';
 
@@ -2312,87 +2387,120 @@
   f_remote << indent() << "flag.Parse()" << '\n';
   f_remote << indent() << '\n';
   f_remote << indent() << "if len(urlString) > 0 {" << '\n';
-  f_remote << indent() << "  var err error" << '\n';
-  f_remote << indent() << "  parsedUrl, err = url.Parse(urlString)" << '\n';
-  f_remote << indent() << "  if err != nil {" << '\n';
-  f_remote << indent() << "    fmt.Fprintln(os.Stderr, \"Error parsing URL: \", err)" << '\n';
-  f_remote << indent() << "    flag.Usage()" << '\n';
-  f_remote << indent() << "  }" << '\n';
-  f_remote << indent() << "  host = parsedUrl.Host" << '\n';
-  f_remote << indent() << "  useHttp = len(parsedUrl.Scheme) <= 0 || parsedUrl.Scheme == \"http\" || parsedUrl.Scheme == \"https\""
+  indent_up();
+  f_remote << indent() << "var err error" << '\n';
+  f_remote << indent() << "parsedUrl, err = url.Parse(urlString)" << '\n';
+  f_remote << indent() << "if err != nil {" << '\n';
+  indent_up();
+  f_remote << indent() << "fmt.Fprintln(os.Stderr, \"Error parsing URL: \", err)" << '\n';
+  f_remote << indent() << "flag.Usage()" << '\n';
+  indent_down();
+  f_remote << indent() << "}" << '\n';
+  f_remote << indent() << "host = parsedUrl.Host" << '\n';
+  f_remote << indent() << "useHttp = len(parsedUrl.Scheme) <= 0 || parsedUrl.Scheme == \"http\" || parsedUrl.Scheme == \"https\""
            << '\n';
+  indent_down();
   f_remote << indent() << "} else if useHttp {" << '\n';
-  f_remote << indent() << "  _, err := url.Parse(fmt.Sprint(\"http://\", host, \":\", port))"
+  indent_up();
+  f_remote << indent() << "_, err := url.Parse(fmt.Sprint(\"http://\", host, \":\", port))"
            << '\n';
-  f_remote << indent() << "  if err != nil {" << '\n';
-  f_remote << indent() << "    fmt.Fprintln(os.Stderr, \"Error parsing URL: \", err)" << '\n';
-  f_remote << indent() << "    flag.Usage()" << '\n';
-  f_remote << indent() << "  }" << '\n';
+  f_remote << indent() << "if err != nil {" << '\n';
+  indent_up();
+  f_remote << indent() << "fmt.Fprintln(os.Stderr, \"Error parsing URL: \", err)" << '\n';
+  f_remote << indent() << "flag.Usage()" << '\n';
+  indent_down();
+  f_remote << indent() << "}" << '\n';
+  indent_down();
   f_remote << indent() << "}" << '\n';
   f_remote << indent() << '\n';
   f_remote << indent() << "cmd := flag.Arg(0)" << '\n';
   f_remote << indent() << "var err error" << '\n';
   f_remote << indent() << "var cfg *thrift.TConfiguration = nil" << '\n';
   f_remote << indent() << "if useHttp {" << '\n';
-  f_remote << indent() << "  trans, err = thrift.NewTHttpClient(parsedUrl.String())" << '\n';
-  f_remote << indent() << "  if len(headers) > 0 {" << '\n';
-  f_remote << indent() << "    httptrans := trans.(*thrift.THttpClient)" << '\n';
-  f_remote << indent() << "    for key, value := range headers {" << '\n';
-  f_remote << indent() << "      httptrans.SetHeader(key, value)" << '\n';
-  f_remote << indent() << "    }" << '\n';
-  f_remote << indent() << "  }" << '\n';
+  indent_up();
+  f_remote << indent() << "trans, err = thrift.NewTHttpClient(parsedUrl.String())" << '\n';
+  f_remote << indent() << "if len(headers) > 0 {" << '\n';
+  indent_up();
+  f_remote << indent() << "httptrans := trans.(*thrift.THttpClient)" << '\n';
+  f_remote << indent() << "for key, value := range headers {" << '\n';
+  indent_up();
+  f_remote << indent() << "httptrans.SetHeader(key, value)" << '\n';
+  indent_down();
+  f_remote << indent() << "}" << '\n';
+  indent_down();
+  f_remote << indent() << "}" << '\n';
+  indent_down();
   f_remote << indent() << "} else {" << '\n';
-  f_remote << indent() << "  portStr := fmt.Sprint(port)" << '\n';
-  f_remote << indent() << "  if strings.Contains(host, \":\") {" << '\n';
-  f_remote << indent() << "         host, portStr, err = net.SplitHostPort(host)" << '\n';
-  f_remote << indent() << "         if err != nil {" << '\n';
-  f_remote << indent() << "                 fmt.Fprintln(os.Stderr, \"error with host:\", err)"
+  indent_up();
+  f_remote << indent() << "portStr := fmt.Sprint(port)" << '\n';
+  f_remote << indent() << "if strings.Contains(host, \":\") {" << '\n';
+  indent_up();
+  f_remote << indent() << "host, portStr, err = net.SplitHostPort(host)" << '\n';
+  f_remote << indent() << "if err != nil {" << '\n';
+  indent_up();
+  f_remote << indent() << "fmt.Fprintln(os.Stderr, \"error with host:\", err)"
            << '\n';
-  f_remote << indent() << "                 os.Exit(1)" << '\n';
-  f_remote << indent() << "         }" << '\n';
-  f_remote << indent() << "  }" << '\n';
-  f_remote << indent() << "  trans = thrift.NewTSocketConf(net.JoinHostPort(host, portStr), cfg)" << '\n';
-  f_remote << indent() << "  if err != nil {" << '\n';
-  f_remote << indent() << "    fmt.Fprintln(os.Stderr, \"error resolving address:\", err)" << '\n';
-  f_remote << indent() << "    os.Exit(1)" << '\n';
-  f_remote << indent() << "  }" << '\n';
-  f_remote << indent() << "  if framed {" << '\n';
-  f_remote << indent() << "    trans = thrift.NewTFramedTransportConf(trans, cfg)" << '\n';
-  f_remote << indent() << "  }" << '\n';
+  f_remote << indent() << "os.Exit(1)" << '\n';
+  indent_down();
+  f_remote << indent() << "}" << '\n';
+  indent_down();
+  f_remote << indent() << "}" << '\n';
+  f_remote << indent() << "trans = thrift.NewTSocketConf(net.JoinHostPort(host, portStr), cfg)" << '\n';
+  f_remote << indent() << "if err != nil {" << '\n';
+  indent_up();
+  f_remote << indent() << "fmt.Fprintln(os.Stderr, \"error resolving address:\", err)" << '\n';
+  f_remote << indent() << "os.Exit(1)" << '\n';
+  indent_down();
+  f_remote << indent() << "}" << '\n';
+  f_remote << indent() << "if framed {" << '\n';
+  indent_up();
+  f_remote << indent() << "trans = thrift.NewTFramedTransportConf(trans, cfg)" << '\n';
+  indent_down();
+  f_remote << indent() << "}" << '\n';
+  indent_down();
   f_remote << indent() << "}" << '\n';
   f_remote << indent() << "if err != nil {" << '\n';
-  f_remote << indent() << "  fmt.Fprintln(os.Stderr, \"Error creating transport\", err)" << '\n';
-  f_remote << indent() << "  os.Exit(1)" << '\n';
+  indent_up();
+  f_remote << indent() << "fmt.Fprintln(os.Stderr, \"Error creating transport\", err)" << '\n';
+  f_remote << indent() << "os.Exit(1)" << '\n';
+  indent_down();
   f_remote << indent() << "}" << '\n';
   f_remote << indent() << "defer trans.Close()" << '\n';
   f_remote << indent() << "var protocolFactory thrift.TProtocolFactory" << '\n';
   f_remote << indent() << "switch protocol {" << '\n';
   f_remote << indent() << "case \"compact\":" << '\n';
-  f_remote << indent() << "  protocolFactory = thrift.NewTCompactProtocolFactoryConf(cfg)" << '\n';
-  f_remote << indent() << "  break" << '\n';
+  indent_up();
+  f_remote << indent() << "protocolFactory = thrift.NewTCompactProtocolFactoryConf(cfg)" << '\n';
+  indent_down();
   f_remote << indent() << "case \"simplejson\":" << '\n';
-  f_remote << indent() << "  protocolFactory = thrift.NewTSimpleJSONProtocolFactoryConf(cfg)" << '\n';
-  f_remote << indent() << "  break" << '\n';
+  indent_up();
+  f_remote << indent() << "protocolFactory = thrift.NewTSimpleJSONProtocolFactoryConf(cfg)" << '\n';
   f_remote << indent() << "case \"json\":" << '\n';
-  f_remote << indent() << "  protocolFactory = thrift.NewTJSONProtocolFactory()" << '\n';
-  f_remote << indent() << "  break" << '\n';
+  indent_up();
+  f_remote << indent() << "protocolFactory = thrift.NewTJSONProtocolFactory()" << '\n';
+  indent_down();
   f_remote << indent() << "case \"binary\", \"\":" << '\n';
-  f_remote << indent() << "  protocolFactory = thrift.NewTBinaryProtocolFactoryConf(cfg)" << '\n';
-  f_remote << indent() << "  break" << '\n';
+  indent_up();
+  f_remote << indent() << "protocolFactory = thrift.NewTBinaryProtocolFactoryConf(cfg)" << '\n';
+  indent_down();
   f_remote << indent() << "default:" << '\n';
-  f_remote << indent() << "  fmt.Fprintln(os.Stderr, \"Invalid protocol specified: \", protocol)"
+  indent_up();
+  f_remote << indent() << "fmt.Fprintln(os.Stderr, \"Invalid protocol specified: \", protocol)"
            << '\n';
-  f_remote << indent() << "  Usage()" << '\n';
-  f_remote << indent() << "  os.Exit(1)" << '\n';
+  f_remote << indent() << "Usage()" << '\n';
+  f_remote << indent() << "os.Exit(1)" << '\n';
+  indent_down();
   f_remote << indent() << "}" << '\n';
   f_remote << indent() << "iprot := protocolFactory.GetProtocol(trans)" << '\n';
   f_remote << indent() << "oprot := protocolFactory.GetProtocol(trans)" << '\n';
   f_remote << indent() << "client := " << package_name_aliased << ".New" << publicize(service_name_)
            << "Client(thrift.NewTStandardClient(iprot, oprot))" << '\n';
   f_remote << indent() << "if err := trans.Open(); err != nil {" << '\n';
-  f_remote << indent() << "  fmt.Fprintln(os.Stderr, \"Error opening socket to \", "
+  indent_up();
+  f_remote << indent() << "fmt.Fprintln(os.Stderr, \"Error opening socket to \", "
                           "host, \":\", port, \" \", err)" << '\n';
-  f_remote << indent() << "  os.Exit(1)" << '\n';
+  f_remote << indent() << "os.Exit(1)" << '\n';
+  indent_down();
   f_remote << indent() << "}" << '\n';
   f_remote << indent() << '\n';
   f_remote << indent() << "switch cmd {" << '\n';
@@ -2407,9 +2515,11 @@
     f_remote << indent() << "case \"" << escape_string(funcName) << "\":" << '\n';
     indent_up();
     f_remote << indent() << "if flag.NArg() - 1 != " << num_args << " {" << '\n';
-    f_remote << indent() << "  fmt.Fprintln(os.Stderr, \"" << escape_string(pubName) << " requires "
+    indent_up();
+    f_remote << indent() << "fmt.Fprintln(os.Stderr, \"" << escape_string(pubName) << " requires "
              << num_args << " args\")" << '\n';
-    f_remote << indent() << "  flag.Usage()" << '\n';
+    f_remote << indent() << "flag.Usage()" << '\n';
+    indent_down();
     f_remote << indent() << "}" << '\n';
 
     for (std::vector<t_field*>::size_type i = 0; i < num_args; ++i) {
@@ -2421,8 +2531,10 @@
         f_remote << indent() << "tmp" << i << ", err := (strconv.Atoi(flag.Arg(" << flagArg << ")))"
                  << '\n';
         f_remote << indent() << "if err != nil {" << '\n';
-        f_remote << indent() << "  Usage()" << '\n';
-        f_remote << indent() << " return" << '\n';
+        indent_up();
+        f_remote << indent() << "Usage()" << '\n';
+        f_remote << indent() << "return" << '\n';
+        indent_down();
         f_remote << indent() << "}" << '\n';
         f_remote << indent() << "argvalue" << i << " := " << package_name_aliased << "."
                  << publicize(the_type->get_name()) << "(tmp" << i << ")" << '\n';
@@ -2452,8 +2564,10 @@
           f_remote << indent() << "tmp" << i << ", " << err << " := (strconv.Atoi(flag.Arg("
                    << flagArg << ")))" << '\n';
           f_remote << indent() << "if " << err << " != nil {" << '\n';
-          f_remote << indent() << "  Usage()" << '\n';
-          f_remote << indent() << "  return" << '\n';
+          indent_up();
+          f_remote << indent() << "Usage()" << '\n';
+          f_remote << indent() << "return" << '\n';
+          indent_down();
           f_remote << indent() << "}" << '\n';
           f_remote << indent() << "argvalue" << i << " := int8(tmp" << i << ")" << '\n';
           break;
@@ -2462,8 +2576,10 @@
           f_remote << indent() << "tmp" << i << ", " << err << " := (strconv.Atoi(flag.Arg("
                    << flagArg << ")))" << '\n';
           f_remote << indent() << "if " << err << " != nil {" << '\n';
-          f_remote << indent() << "  Usage()" << '\n';
-          f_remote << indent() << "  return" << '\n';
+          indent_up();
+          f_remote << indent() << "Usage()" << '\n';
+          f_remote << indent() << "return" << '\n';
+          indent_down();
           f_remote << indent() << "}" << '\n';
           f_remote << indent() << "argvalue" << i << " := int16(tmp" << i << ")" << '\n';
           break;
@@ -2472,8 +2588,10 @@
           f_remote << indent() << "tmp" << i << ", " << err << " := (strconv.Atoi(flag.Arg("
                    << flagArg << ")))" << '\n';
           f_remote << indent() << "if " << err << " != nil {" << '\n';
-          f_remote << indent() << "  Usage()" << '\n';
-          f_remote << indent() << "  return" << '\n';
+          indent_up();
+          f_remote << indent() << "Usage()" << '\n';
+          f_remote << indent() << "return" << '\n';
+          indent_down();
           f_remote << indent() << "}" << '\n';
           f_remote << indent() << "argvalue" << i << " := int32(tmp" << i << ")" << '\n';
           break;
@@ -2482,8 +2600,10 @@
           f_remote << indent() << "argvalue" << i << ", " << err
                    << " := (strconv.ParseInt(flag.Arg(" << flagArg << "), 10, 64))" << '\n';
           f_remote << indent() << "if " << err << " != nil {" << '\n';
-          f_remote << indent() << "  Usage()" << '\n';
-          f_remote << indent() << "  return" << '\n';
+          indent_up();
+          f_remote << indent() << "Usage()" << '\n';
+          f_remote << indent() << "return" << '\n';
+          indent_down();
           f_remote << indent() << "}" << '\n';
           break;
 
@@ -2491,8 +2611,10 @@
           f_remote << indent() << "argvalue" << i << ", " << err
                    << " := (strconv.ParseFloat(flag.Arg(" << flagArg << "), 64))" << '\n';
           f_remote << indent() << "if " << err << " != nil {" << '\n';
-          f_remote << indent() << "  Usage()" << '\n';
-          f_remote << indent() << "  return" << '\n';
+          indent_up();
+          f_remote << indent() << "Usage()" << '\n';
+          f_remote << indent() << "return" << '\n';
+          indent_down();
           f_remote << indent() << "}" << '\n';
           break;
 
@@ -2500,8 +2622,10 @@
           f_remote << indent() << "argvalue" << i << ", " << err
                    << " := (thrift.ParseTuuid(flag.Arg(" << flagArg << ")))" << '\n';
           f_remote << indent() << "if " << err << " != nil {" << '\n';
-          f_remote << indent() << "  Usage()" << '\n';
-          f_remote << indent() << "  return" << '\n';
+          indent_up();
+          f_remote << indent() << "Usage()" << '\n';
+          f_remote << indent() << "return" << '\n';
+          indent_down();
           f_remote << indent() << "}" << '\n';
           break;
 
@@ -2531,18 +2655,22 @@
         f_remote << indent() << "_, " << err1 << " := " << mbTrans << ".WriteString(" << arg << ")"
                  << '\n';
         f_remote << indent() << "if " << err1 << " != nil {" << '\n';
-        f_remote << indent() << "  Usage()" << '\n';
-        f_remote << indent() << "  return" << '\n';
+        indent_up();
+        f_remote << indent() << "Usage()" << '\n';
+        f_remote << indent() << "return" << '\n';
+        indent_down();
         f_remote << indent() << "}" << '\n';
         f_remote << indent() << factory << " := thrift.NewTJSONProtocolFactory()" << '\n';
         f_remote << indent() << jsProt << " := " << factory << ".GetProtocol(" << mbTrans << ")"
                  << '\n';
         f_remote << indent() << "argvalue" << i << " := " << tstruct_module << ".New" << tstruct_name
                  << "()" << '\n';
-        f_remote << indent() << err2 << " := argvalue" << i << "." << read_method_name_ <<  "(context.Background(), " << jsProt << ")" << '\n';
+        f_remote << indent() << err2 << " := argvalue" << i << "." << read_method_name_ << "(context.Background(), " << jsProt << ")" << '\n';
         f_remote << indent() << "if " << err2 << " != nil {" << '\n';
-        f_remote << indent() << "  Usage()" << '\n';
-        f_remote << indent() << "  return" << '\n';
+        indent_up();
+        f_remote << indent() << "Usage()" << '\n';
+        f_remote << indent() << "return" << '\n';
+        indent_down();
         f_remote << indent() << "}" << '\n';
       } else if (the_type2->is_container() || the_type2->is_xception()) {
         string arg(tmp("arg"));
@@ -2559,8 +2687,10 @@
         f_remote << indent() << "_, " << err1 << " := " << mbTrans << ".WriteString(" << arg << ")"
                  << '\n';
         f_remote << indent() << "if " << err1 << " != nil { " << '\n';
-        f_remote << indent() << "  Usage()" << '\n';
-        f_remote << indent() << "  return" << '\n';
+        indent_up();
+        f_remote << indent() << "Usage()" << '\n';
+        f_remote << indent() << "return" << '\n';
+        indent_down();
         f_remote << indent() << "}" << '\n';
         f_remote << indent() << factory << " := thrift.NewTJSONProtocolFactory()" << '\n';
         f_remote << indent() << jsProt << " := " << factory << ".GetProtocol(" << mbTrans << ")"
@@ -2570,8 +2700,10 @@
         f_remote << indent() << err2 << " := containerStruct" << i << ".ReadField" << (i + 1) << "(context.Background(), "
                  << jsProt << ")" << '\n';
         f_remote << indent() << "if " << err2 << " != nil {" << '\n';
-        f_remote << indent() << "  Usage()" << '\n';
-        f_remote << indent() << "  return" << '\n';
+        indent_up();
+        f_remote << indent() << "Usage()" << '\n';
+        f_remote << indent() << "return" << '\n';
+        indent_down();
         f_remote << indent() << "}" << '\n';
         f_remote << indent() << "argvalue" << i << " := containerStruct" << i << "." << argName
                  << '\n';
@@ -2641,10 +2773,13 @@
   }
 
   f_remote << indent() << "case \"\":" << '\n';
-  f_remote << indent() << "  Usage()" << '\n';
-  f_remote << indent() << "  break" << '\n';
+  indent_up();
+  f_remote << indent() << "Usage()" << '\n';
+  indent_down();
   f_remote << indent() << "default:" << '\n';
-  f_remote << indent() << "  fmt.Fprintln(os.Stderr, \"Invalid function \", cmd)" << '\n';
+  indent_up();
+  f_remote << indent() << "fmt.Fprintln(os.Stderr, \"Invalid function \", cmd)" << '\n';
+  indent_down();
   f_remote << indent() << "}" << '\n';
   indent_down();
   f_remote << indent() << "}" << '\n';
@@ -2697,78 +2832,95 @@
 
   if (extends_processor.empty()) {
     f_types_ << indent() << "type " << serviceName << "Processor struct {" << '\n';
-    f_types_ << indent() << "  processorMap map[string]thrift.TProcessorFunction" << '\n';
-    f_types_ << indent() << "  handler " << serviceName << '\n';
+    indent_up();
+    f_types_ << indent() << "processorMap map[string]thrift.TProcessorFunction" << '\n';
+    f_types_ << indent() << "handler " << serviceName << '\n';
+    indent_down();
     f_types_ << indent() << "}" << '\n' << '\n';
     f_types_ << indent() << "func (p *" << serviceName
                << "Processor) AddToProcessorMap(key string, processor thrift.TProcessorFunction) {"
                << '\n';
-    f_types_ << indent() << "  p.processorMap[key] = processor" << '\n';
+    indent_up();
+    f_types_ << indent() << "p.processorMap[key] = processor" << '\n';
+    indent_down();
     f_types_ << indent() << "}" << '\n' << '\n';
     f_types_ << indent() << "func (p *" << serviceName
                << "Processor) GetProcessorFunction(key string) "
                   "(processor thrift.TProcessorFunction, ok bool) {" << '\n';
-    f_types_ << indent() << "  processor, ok = p.processorMap[key]" << '\n';
-    f_types_ << indent() << "  return processor, ok" << '\n';
+    indent_up();
+    f_types_ << indent() << "processor, ok = p.processorMap[key]" << '\n';
+    f_types_ << indent() << "return processor, ok" << '\n';
+    indent_down();
     f_types_ << indent() << "}" << '\n' << '\n';
     f_types_ << indent() << "func (p *" << serviceName
                << "Processor) ProcessorMap() map[string]thrift.TProcessorFunction {" << '\n';
-    f_types_ << indent() << "  return p.processorMap" << '\n';
+    indent_up();
+    f_types_ << indent() << "return p.processorMap" << '\n';
+    indent_down();
     f_types_ << indent() << "}" << '\n' << '\n';
     f_types_ << indent() << "func New" << serviceName << "Processor(handler " << serviceName
                << ") *" << serviceName << "Processor {" << '\n' << '\n';
+    indent_up();
     f_types_
-        << indent() << "  " << self << " := &" << serviceName
+        << indent() << self << " := &" << serviceName
         << "Processor{handler:handler, processorMap:make(map[string]thrift.TProcessorFunction)}"
         << '\n';
 
     for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
       string escapedFuncName(escape_string((*f_iter)->get_name()));
-      f_types_ << indent() << "  " << self << ".processorMap[\"" << escapedFuncName << "\"] = &"
+      f_types_ << indent() << self << ".processorMap[\"" << escapedFuncName << "\"] = &"
                  << pServiceName << "Processor" << publicize((*f_iter)->get_name())
                  << "{handler:handler}" << '\n';
     }
 
     string x(tmp("x"));
     f_types_ << indent() << "return " << self << '\n';
+    indent_down();
     f_types_ << indent() << "}" << '\n' << '\n';
     f_types_ << indent() << "func (p *" << serviceName
                << "Processor) Process(ctx context.Context, iprot, oprot thrift.TProtocol) (success bool, err "
                   "thrift.TException) {" << '\n';
-    f_types_ << indent() << "  name, _, seqId, err2 := iprot.ReadMessageBegin(ctx)" << '\n';
-    f_types_ << indent() << "  if err2 != nil { return false, thrift.WrapTException(err2) }" << '\n';
-    f_types_ << indent() << "  if processor, ok := p.GetProcessorFunction(name); ok {" << '\n';
-    f_types_ << indent() << "    return processor.Process(ctx, seqId, iprot, oprot)" << '\n';
-    f_types_ << indent() << "  }" << '\n';
-    f_types_ << indent() << "  iprot.Skip(ctx, thrift.STRUCT)" << '\n';
-    f_types_ << indent() << "  iprot.ReadMessageEnd(ctx)" << '\n';
-    f_types_ << indent() << "  " << x
+    indent_up();
+    f_types_ << indent() << "name, _, seqId, err2 := iprot.ReadMessageBegin(ctx)" << '\n';
+    f_types_ << indent() << "if err2 != nil { return false, thrift.WrapTException(err2) }" << '\n';
+    f_types_ << indent() << "if processor, ok := p.GetProcessorFunction(name); ok {" << '\n';
+    indent_up();
+    f_types_ << indent() << "return processor.Process(ctx, seqId, iprot, oprot)" << '\n';
+    indent_down();
+    f_types_ << indent() << "}" << '\n';
+    f_types_ << indent() << "iprot.Skip(ctx, thrift.STRUCT)" << '\n';
+    f_types_ << indent() << "iprot.ReadMessageEnd(ctx)" << '\n';
+    f_types_ << indent() << "" << x
                << " := thrift.NewTApplicationException(thrift.UNKNOWN_METHOD, \"Unknown function "
                   "\" + name)" << '\n';
-    f_types_ << indent() << "  oprot.WriteMessageBegin(ctx, name, thrift.EXCEPTION, seqId)" << '\n';
-    f_types_ << indent() << "  " << x << ".Write(ctx, oprot)" << '\n';
-    f_types_ << indent() << "  oprot.WriteMessageEnd(ctx)" << '\n';
-    f_types_ << indent() << "  oprot.Flush(ctx)" << '\n';
-    f_types_ << indent() << "  return false, " << x << '\n';
-    f_types_ << indent() << "" << '\n';
+    f_types_ << indent() << "oprot.WriteMessageBegin(ctx, name, thrift.EXCEPTION, seqId)" << '\n';
+    f_types_ << indent() << "" << x << ".Write(ctx, oprot)" << '\n';
+    f_types_ << indent() << "oprot.WriteMessageEnd(ctx)" << '\n';
+    f_types_ << indent() << "oprot.Flush(ctx)" << '\n';
+    f_types_ << indent() << "return false, " << x << '\n';
+    indent_down();
     f_types_ << indent() << "}" << '\n' << '\n';
   } else {
     f_types_ << indent() << "type " << serviceName << "Processor struct {" << '\n';
-    f_types_ << indent() << "  *" << extends_processor << '\n';
+    indent_up();
+    f_types_ << indent() << "*" << extends_processor << '\n';
+    indent_down();
     f_types_ << indent() << "}" << '\n' << '\n';
     f_types_ << indent() << "func New" << serviceName << "Processor(handler " << serviceName
                << ") *" << serviceName << "Processor {" << '\n';
-    f_types_ << indent() << "  " << self << " := &" << serviceName << "Processor{"
+    indent_up();
+    f_types_ << indent() << self << " := &" << serviceName << "Processor{"
                << extends_processor_new << "(handler)}" << '\n';
 
     for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
       string escapedFuncName(escape_string((*f_iter)->get_name()));
-      f_types_ << indent() << "  " << self << ".AddToProcessorMap(\"" << escapedFuncName
+      f_types_ << indent() << self << ".AddToProcessorMap(\"" << escapedFuncName
                  << "\", &" << pServiceName << "Processor" << publicize((*f_iter)->get_name())
                  << "{handler:handler})" << '\n';
     }
 
-    f_types_ << indent() << "  return " << self << '\n';
+    f_types_ << indent() << "return " << self << '\n';
+    indent_down();
     f_types_ << indent() << "}" << '\n' << '\n';
   }
 
@@ -2795,7 +2947,9 @@
   // t_struct* xs = tfunction->get_xceptions();
   // const std::vector<t_field*>& xceptions = xs->get_members();
   f_types_ << indent() << "type " << processorName << " struct {" << '\n';
-  f_types_ << indent() << "  handler " << publicize(tservice->get_name()) << '\n';
+  indent_up();
+  f_types_ << indent() << "handler " << publicize(tservice->get_name()) << '\n';
+  indent_down();
   f_types_ << indent() << "}" << '\n' << '\n';
   f_types_ << indent() << "func (p *" << processorName
              << ") Process(ctx context.Context, seqId int32, iprot, oprot thrift.TProtocol) (success bool, err "
@@ -2807,7 +2961,7 @@
     f_types_ << indent() << "var " << write_err << " error" << '\n';
   }
   f_types_ << indent() << "args := " << argsname << "{}" << '\n';
-  f_types_ << indent() << "if err2 := args." << read_method_name_ <<  "(ctx, iprot); err2 != nil {" << '\n';
+  f_types_ << indent() << "if err2 := args." << read_method_name_ << "(ctx, iprot); err2 != nil {" << '\n';
   indent_up();
   f_types_ << indent() << "iprot.ReadMessageEnd(ctx)" << '\n';
   if (!tfunction->is_oneway()) {
@@ -3096,7 +3250,7 @@
       string type_name = inkey ? type_to_go_key_type(tfield->get_type())
                                : type_to_go_type(tfield->get_type());
 
-      out << "var " << tfield->get_name() << " " << type_name << '\n';
+      out << indent() << "var " << tfield->get_name() << " " << type_name << '\n';
     }
 
     indent(out) << "if v, err := iprot.";
@@ -3154,10 +3308,13 @@
     }
 
     out << "; err != nil {" << '\n';
+    indent_up();
     out << indent() << "return thrift.PrependError(\"error reading field " << tfield->get_key()
         << ": \", err)" << '\n';
 
-    out << "} else {" << '\n';
+    indent_down();
+    out << indent() << "} else {" << '\n';
+    indent_up();
     string wrap;
 
     if (type->is_enum() || orig_type->is_typedef()) {
@@ -3174,7 +3331,8 @@
       indent(out) << name << " = " << maybe_address << "temp" << '\n';
     }
 
-    out << "}" << '\n';
+    indent_down();
+    out << indent() << "}" << '\n';
   } else {
     throw "INVALID TYPE IN generate_deserialize_field '" + type->get_name() + "' for field '"
         + tfield->get_name() + "'";
@@ -3193,9 +3351,11 @@
 
   out << indent() << prefix << eq << (pointer_field ? "&" : "");
   generate_go_struct_initializer(out, tstruct);
-  out << indent() << "if err := " << prefix << "." << read_method_name_ <<  "(ctx, iprot); err != nil {" << '\n';
-  out << indent() << "  return thrift.PrependError(fmt.Sprintf(\"%T error reading struct: \", "
+  out << indent() << "if err := " << prefix << "." << read_method_name_ << "(ctx, iprot); err != nil {" << '\n';
+  indent_up();
+  out << indent() << "return thrift.PrependError(fmt.Sprintf(\"%T error reading struct: \", "
       << prefix << "), err)" << '\n';
+  indent_down();
   out << indent() << "}" << '\n';
 }
 
@@ -3219,31 +3379,37 @@
   if (ttype->is_map()) {
     out << indent() << "_, _, size, err := iprot.ReadMapBegin(ctx)" << '\n';
     out << indent() << "if err != nil {" << '\n';
-    out << indent() << "  return thrift.PrependError(\"error reading map begin: \", err)" << '\n';
+    indent_up();
+    out << indent() << "return thrift.PrependError(\"error reading map begin: \", err)" << '\n';
+    indent_down();
     out << indent() << "}" << '\n';
     out << indent() << "tMap := make(" << type_to_go_type(orig_type) << ", size)" << '\n';
-    out << indent() << prefix << eq << " " << (pointer_field ? "&" : "") << "tMap" << '\n';
+    out << indent() << prefix << eq << (pointer_field ? "&" : "") << "tMap" << '\n';
   } else if (ttype->is_set()) {
     out << indent() << "_, size, err := iprot.ReadSetBegin(ctx)" << '\n';
     out << indent() << "if err != nil {" << '\n';
-    out << indent() << "  return thrift.PrependError(\"error reading set begin: \", err)" << '\n';
+    indent_up();
+    out << indent() << "return thrift.PrependError(\"error reading set begin: \", err)" << '\n';
+    indent_down();
     out << indent() << "}" << '\n';
     out << indent() << "tSet := make(" << type_to_go_type(orig_type) << ", 0, size)" << '\n';
-    out << indent() << prefix << eq << " " << (pointer_field ? "&" : "") << "tSet" << '\n';
+    out << indent() << prefix << eq << (pointer_field ? "&" : "") << "tSet" << '\n';
   } else if (ttype->is_list()) {
     out << indent() << "_, size, err := iprot.ReadListBegin(ctx)" << '\n';
     out << indent() << "if err != nil {" << '\n';
-    out << indent() << "  return thrift.PrependError(\"error reading list begin: \", err)" << '\n';
+    indent_up();
+    out << indent() << "return thrift.PrependError(\"error reading list begin: \", err)" << '\n';
+    indent_down();
     out << indent() << "}" << '\n';
     out << indent() << "tSlice := make(" << type_to_go_type(orig_type) << ", 0, size)" << '\n';
-    out << indent() << prefix << eq << " " << (pointer_field ? "&" : "") << "tSlice" << '\n';
+    out << indent() << prefix << eq << (pointer_field ? "&" : "") << "tSlice" << '\n';
   } else {
     throw "INVALID TYPE IN generate_deserialize_container '" + ttype->get_name() + "' for prefix '"
         + prefix + "'";
   }
 
   // For loop iterates over elements
-  out << indent() << "for i := 0; i < size; i ++ {" << '\n';
+  out << indent() << "for i := 0; i < size; i++ {" << '\n';
   indent_up();
 
   if (pointer_field) {
@@ -3263,15 +3429,21 @@
   // Read container end
   if (ttype->is_map()) {
     out << indent() << "if err := iprot.ReadMapEnd(ctx); err != nil {" << '\n';
-    out << indent() << "  return thrift.PrependError(\"error reading map end: \", err)" << '\n';
+    indent_up();
+    out << indent() << "return thrift.PrependError(\"error reading map end: \", err)" << '\n';
+    indent_down();
     out << indent() << "}" << '\n';
   } else if (ttype->is_set()) {
     out << indent() << "if err := iprot.ReadSetEnd(ctx); err != nil {" << '\n';
-    out << indent() << "  return thrift.PrependError(\"error reading set end: \", err)" << '\n';
+    indent_up();
+    out << indent() << "return thrift.PrependError(\"error reading set end: \", err)" << '\n';
+    indent_down();
     out << indent() << "}" << '\n';
   } else if (ttype->is_list()) {
     out << indent() << "if err := iprot.ReadListEnd(ctx); err != nil {" << '\n';
-    out << indent() << "  return thrift.PrependError(\"error reading list end: \", err)" << '\n';
+    indent_up();
+    out << indent() << "return thrift.PrependError(\"error reading list end: \", err)" << '\n';
+    indent_down();
     out << indent() << "}" << '\n';
   }
 }
@@ -3407,9 +3579,12 @@
     }
 
     out << "; err != nil {" << '\n';
+    indent_up();
     out << indent() << "return thrift.PrependError(fmt.Sprintf(\"%T."
         << escape_string(tfield->get_name()) << " (" << tfield->get_key()
-        << ") field write error: \", p), err) }" << '\n';
+        << ") field write error: \", p), err)" << '\n';
+    indent_down();
+    out << indent() << "}" << '\n';
   } else {
     throw "compiler error: Invalid type in generate_serialize_field '" + type->get_name()
         + "' for field '" + name + "'";
@@ -3425,8 +3600,10 @@
 void t_go_generator::generate_serialize_struct(ostream& out, t_struct* tstruct, string prefix) {
   (void)tstruct;
   out << indent() << "if err := " << prefix << "." << write_method_name_ << "(ctx, oprot); err != nil {" << '\n';
-  out << indent() << "  return thrift.PrependError(fmt.Sprintf(\"%T error writing struct: \", "
+  indent_up();
+  out << indent() << "return thrift.PrependError(fmt.Sprintf(\"%T error writing struct: \", "
       << prefix << "), err)" << '\n';
+  indent_down();
   out << indent() << "}" << '\n';
 }
 
@@ -3442,19 +3619,25 @@
         << type_to_enum(((t_map*)ttype)->get_key_type()) << ", "
         << type_to_enum(((t_map*)ttype)->get_val_type()) << ", "
         << "len(" << prefix << ")); err != nil {" << '\n';
-    out << indent() << "  return thrift.PrependError(\"error writing map begin: \", err)" << '\n';
+    indent_up();
+    out << indent() << "return thrift.PrependError(\"error writing map begin: \", err)" << '\n';
+    indent_down();
     out << indent() << "}" << '\n';
   } else if (ttype->is_set()) {
     out << indent() << "if err := oprot.WriteSetBegin(ctx, "
         << type_to_enum(((t_set*)ttype)->get_elem_type()) << ", "
         << "len(" << prefix << ")); err != nil {" << '\n';
-    out << indent() << "  return thrift.PrependError(\"error writing set begin: \", err)" << '\n';
+    indent_up();
+    out << indent() << "return thrift.PrependError(\"error writing set begin: \", err)" << '\n';
+    indent_down();
     out << indent() << "}" << '\n';
   } else if (ttype->is_list()) {
     out << indent() << "if err := oprot.WriteListBegin(ctx, "
         << type_to_enum(((t_list*)ttype)->get_elem_type()) << ", "
         << "len(" << prefix << ")); err != nil {" << '\n';
-    out << indent() << "  return thrift.PrependError(\"error writing list begin: \", err)" << '\n';
+    indent_up();
+    out << indent() << "return thrift.PrependError(\"error writing list begin: \", err)" << '\n';
+    indent_down();
     out << indent() << "}" << '\n';
   } else {
     throw "compiler error: Invalid type in generate_serialize_container '" + ttype->get_name()
@@ -3513,15 +3696,21 @@
 
   if (ttype->is_map()) {
     out << indent() << "if err := oprot.WriteMapEnd(ctx); err != nil {" << '\n';
-    out << indent() << "  return thrift.PrependError(\"error writing map end: \", err)" << '\n';
+    indent_up();
+    out << indent() << "return thrift.PrependError(\"error writing map end: \", err)" << '\n';
+    indent_down();
     out << indent() << "}" << '\n';
   } else if (ttype->is_set()) {
     out << indent() << "if err := oprot.WriteSetEnd(ctx); err != nil {" << '\n';
-    out << indent() << "  return thrift.PrependError(\"error writing set end: \", err)" << '\n';
+    indent_up();
+    out << indent() << "return thrift.PrependError(\"error writing set end: \", err)" << '\n';
+    indent_down();
     out << indent() << "}" << '\n';
   } else if (ttype->is_list()) {
     out << indent() << "if err := oprot.WriteListEnd(ctx); err != nil {" << '\n';
-    out << indent() << "  return thrift.PrependError(\"error writing list end: \", err)" << '\n';
+    indent_up();
+    out << indent() << "return thrift.PrependError(\"error writing list end: \", err)" << '\n';
+    indent_down();
     out << indent() << "}" << '\n';
   }
 }
diff --git a/compiler/cpp/src/thrift/generate/t_go_generator.h b/compiler/cpp/src/thrift/generate/t_go_generator.h
index 55f544e..1efa32d 100644
--- a/compiler/cpp/src/thrift/generate/t_go_generator.h
+++ b/compiler/cpp/src/thrift/generate/t_go_generator.h
@@ -286,6 +286,10 @@
 
   static bool is_pointer_field(t_field* tfield, bool in_container = false);
 
+  std::string indent_str() const {
+    return "\t";
+  }
+
 private:
   std::string gen_package_prefix_;
   std::string gen_thrift_import_;