github.com/nyan233/littlerpc@v0.4.6-0.20230316182519-0c8d5c48abaf/cmd/pxtor/Readme.md (about)

     1  # Pxtor
     2  `LittleRpc`自带的一个简单的代码生成器,他会生成符合规范的代码
     3  以下是一个简单的例子
     4  ```go
     5  type Test struct{}
     6  
     7  func (p *Test) Foo(s1 string) (int,error) {
     8      return 1 << 20,nil
     9  }
    10  
    11  func (p *Test) Bar(s1 string) (int,error) {
    12  	return 1 << 30,nil
    13  }
    14  ```
    15  > 需要生成的代码必须是一个绑定类型的函数,也就是必须要有`receiver`(接收器),因为`pxtor`根据具体的类型寻找其拥有的
    16  > 方法集,生成的代理对象的名字默认是`类型名+Proxy`
    17  ```go
    18  /*
    19  	@Generator   : littlerpc-generator
    20  	@CreateTime  : 2022-06-20 18:59:24.259338 +0800 CST m=+0.000619244
    21  	@Author      : littlerpc-generator
    22  */
    23  package test
    24  
    25  import (
    26  	"github.com/nyan233/littlerpc/impl/client"
    27  )
    28  
    29  type TestProxy struct {
    30  	*client.Client
    31  }
    32  
    33  func NewTestProxy(client *client.Client) *TestProxy {
    34  	proxy := &TestProxy{}
    35  	err := client.BindFunc(proxy)
    36  	if err != nil {
    37  		panic(err)
    38  	}
    39  	proxy.Client = client
    40  	return proxy
    41  }
    42  
    43  func (proxy TestProxy) Foo(s1 string) (int, error) {
    44  	inter, err := proxy.Call("Test.Foo", s1)
    45  	if err != nil {
    46  		return 0,err
    47  	}
    48  	r0 := inter[0].(int)
    49  	r1 := inter[1].(error)
    50  	return r0, r1
    51  }
    52  
    53  func (proxy TestProxy) Bar(s1 string) (int, error) {
    54  	inter, err := proxy.Call("Test.Bar", s1)
    55  	if err != nil {
    56          return 0,err
    57  	}
    58  	r0 := inter[0].(int)
    59  	r1 := inter[1].(error)
    60  	return r0, r1
    61  }
    62  ```