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 ```