THRIFT-3778 go client can not pass method parameter to server of other language
Client: Go
Patch: guo <ggndnn@163.com>
This closes #978
diff --git a/compiler/cpp/src/generate/t_go_generator.cc b/compiler/cpp/src/generate/t_go_generator.cc
index 6e6a115..3f9b858 100644
--- a/compiler/cpp/src/generate/t_go_generator.cc
+++ b/compiler/cpp/src/generate/t_go_generator.cc
@@ -1512,10 +1512,11 @@
// if negative id, ensure we generate a valid method name
string field_method_prefix("ReadField");
+ int32_t field_method_suffix = field_id;
- if (field_id < 0) {
+ if (field_method_suffix < 0) {
field_method_prefix += "_";
- field_id *= -1;
+ field_method_suffix *= -1;
}
out << indent() << "case " << field_id << ":" << endl;
@@ -1526,7 +1527,7 @@
thriftFieldTypeId = "thrift.STRING";
}
- out << indent() << "if err := p." << field_method_prefix << field_id << "(iprot); err != nil {"
+ out << indent() << "if err := p." << field_method_prefix << field_method_suffix << "(iprot); err != nil {"
<< endl;
out << indent() << " return err" << endl;
out << indent() << "}" << endl;
@@ -1588,13 +1589,14 @@
string field_name(publicize((*f_iter)->get_name()));
string field_method_prefix("ReadField");
int32_t field_id = (*f_iter)->get_key();
+ int32_t field_method_suffix = field_id;
- if (field_id < 0) {
+ if (field_method_suffix < 0) {
field_method_prefix += "_";
- field_id *= -1;
+ field_method_suffix *= -1;
}
- out << indent() << "func (p *" << tstruct_name << ") " << field_method_prefix << field_id
+ out << indent() << "func (p *" << tstruct_name << ") " << field_method_prefix << field_method_suffix
<< "(iprot thrift.TProtocol) error {" << endl;
indent_up();
generate_deserialize_field(out, *f_iter, false, "p.");
@@ -1637,13 +1639,14 @@
field_name = (*f_iter)->get_name();
escape_field_name = escape_string(field_name);
field_id = (*f_iter)->get_key();
+ int32_t field_method_suffix = field_id;
- if (field_id < 0) {
+ if (field_method_suffix < 0) {
field_method_prefix += "_";
- field_id *= -1;
+ field_method_suffix *= -1;
}
- out << indent() << "if err := p." << field_method_prefix << field_id
+ out << indent() << "if err := p." << field_method_prefix << field_method_suffix
<< "(oprot); err != nil { return err }" << endl;
}
@@ -1663,13 +1666,14 @@
escape_field_name = escape_string(field_name);
// field_default_value = (*f_iter)->get_value();
field_required = (*f_iter)->get_req();
+ int32_t field_method_suffix = field_id;
- if (field_id < 0) {
+ if (field_method_suffix < 0) {
field_method_prefix += "_";
- field_id *= -1;
+ field_method_suffix *= -1;
}
- out << indent() << "func (p *" << tstruct_name << ") " << field_method_prefix << field_id
+ out << indent() << "func (p *" << tstruct_name << ") " << field_method_prefix << field_method_suffix
<< "(oprot thrift.TProtocol) (err error) {" << endl;
indent_up();