This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-website.git


The following commit(s) were added to refs/heads/master by this push:
     new de6cf89  Feat: add golang quick start introduce (#889)
de6cf89 is described below

commit de6cf8966e243517a52d55498fa28ac0967f3c1d
Author: 氕氘氚 <[email protected]>
AuthorDate: Sat Aug 7 17:42:25 2021 +0800

    Feat: add golang quick start introduce (#889)
    
    * feat: add golang quick start introduce
    
    * del yaml context
---
 content/zh/docs/quick-start.md | 77 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 77 insertions(+)

diff --git a/content/zh/docs/quick-start.md b/content/zh/docs/quick-start.md
index 9c3af19..67feee7 100644
--- a/content/zh/docs/quick-start.md
+++ b/content/zh/docs/quick-start.md
@@ -66,6 +66,34 @@ public interface DemoService {
 
 ### Golang
 
+Go 语言生成的 stub 如下,这个 stub 里存了用户定义的接口和数据的类型。
+
+```go
+func _DUBBO_Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec 
func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, 
error) {
+       in := new(HelloRequest)
+       if err := dec(in); err != nil {
+               return nil, err
+       }
+       base := srv.(dgrpc.Dubbo3GrpcService)
+       args := []interface{}{}
+       args = append(args, in)
+       invo := invocation.NewRPCInvocation("SayHello", args, nil)
+       if interceptor == nil {
+               result := base.GetProxyImpl().Invoke(ctx, invo)
+               return result.Result(), result.Error()
+       }
+       info := &grpc.UnaryServerInfo{
+               Server:     srv,
+               FullMethod: "/main.Greeter/SayHello",
+       }
+       handler := func(ctx context.Context, req interface{}) (interface{}, 
error) {
+               result := base.GetProxyImpl().Invoke(context.Background(), invo)
+               return result.Result(), result.Error()
+       }
+       return interceptor(ctx, in, info, handler)
+}
+```
+
 
 ## 配置并加载服务
 提供端负责提供具体的 Dubbo 服务实现,也就是遵循 RPC 签名所约束的格式,去实现具体的业务逻辑代码。在实现服务之后,要将服务实现注册为标准的 
Dubbo 服务,
@@ -120,6 +148,55 @@ public void callService() throws Exception {
 
 ### Golang
 
+提供端,实现服务
+
+```go
+type User struct {
+       ID   string
+       Name string
+       Age  int32
+       Time time.Time
+}
+
+type UserProvider struct {
+}
+
+func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, 
error) {
+       gxlog.CInfo("req:%#v", req)
+       rsp := User{"A001", "Alex Stocks", 18, time.Now()}
+       gxlog.CInfo("rsp:%#v", rsp)
+       return &rsp, nil
+}
+
+func (u *UserProvider) Reference() string {
+       return "UserProvider"
+}
+
+func (u User) JavaClassName() string {
+       return "org.apache.dubbo.User"
+}
+
+func main() {
+    hessian.RegisterPOJO(&User{})
+       config.SetProviderService(new(UserProvider))
+}
+```
+
+消费端,使用服务 proxy
+
+```go
+func main() {
+       config.Load()
+       user := &pkg.User{}
+       err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
+       if err != nil {
+               os.Exit(1)
+               return
+       }
+       gxlog.CInfo("response result: %v\n", user)
+}
+```
+
 
 ## 查看完整示例
 * [Java IDL Quick Start](../languages/java/quick-start)

Reply via email to