cloudwego / thriftgo

An implementation of thrift compiler in go language.
Apache License 2.0
260 stars 85 forks source link

Missing exception in the generated code #126

Open mailsmail opened 1 year ago

mailsmail commented 1 year ago

Hello, I tried to generate a Go code from simple Thrift file and I noticed that there are some difference in the code generated by Apache Thrift and ThriftGo. The code generated by ThriftGo is missing some lines that handle exception. It happen to void function that throw exception.

This is the thrift file:

exception SomeException {
    1: string message
}

service SomeService
{
    void some_function() throws(1:SomeException o1)
}

Then using Apache Thrift (v0.13.0) the generated Go code is:

func (p *SomeServiceClient) SomeFunction(ctx context.Context) (err error) {
    var _args0 SomeServiceSomeFunctionArgs
    var _result1 SomeServiceSomeFunctionResult
    if err = p.Client_().Call(ctx, "some_function", &_args0, &_result1); err != nil {
        return
    }
    switch {
    case _result1.O1 != nil:
        return _result1.O1
    }

    return nil
}

But, when using ThriftGo (v0.3.1) the generated code is:

func (p *SomeServiceClient) SomeFunction(ctx context.Context) (err error) {
    var _args SomeServiceSomeFunctionArgs
    var _result SomeServiceSomeFunctionResult
    if err = p.Client_().Call(ctx, "some_function", &_args, &_result); err != nil {
        return
    }
    return nil
}

As you can see, the switch block that handle the exception is missing.

I'm not familiar with the ThriftGo, but I guess it is because in this template https://github.com/cloudwego/thriftgo/blob/main/generator/golang/templates/client.go#L96-L103 the throw exception will be generated if the function is not a void type.

Thank you

HeyJavaBean commented 1 year ago

Thanks for catching this issue! Sorry about that, we actually have a little bug in our code implementation. I'll fix this later.