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

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


The following commit(s) were added to refs/heads/refactor/next-2 by this push:
     new 9afd4755f8 Update go quickstart
9afd4755f8 is described below

commit 9afd4755f8521bfa25d812399985a46e03d790e9
Author: Albumen Kevin <[email protected]>
AuthorDate: Fri Feb 10 10:04:40 2023 +0800

    Update go quickstart
---
 content/zh-cn/overview/quickstart/_index.md        |   8 +-
 content/zh-cn/overview/quickstart/go/_index.md     |  42 +++++
 content/zh-cn/overview/quickstart/go/install.md    |  48 +++++
 .../overview/quickstart/go/quickstart_triple.md    | 120 ++++++++++++
 .../go/quickstart_triple_with_customize.md         | 209 +++++++++++++++++++++
 5 files changed, 424 insertions(+), 3 deletions(-)

diff --git a/content/zh-cn/overview/quickstart/_index.md 
b/content/zh-cn/overview/quickstart/_index.md
index 17f2ca5ba5..ee4106b143 100755
--- a/content/zh-cn/overview/quickstart/_index.md
+++ b/content/zh-cn/overview/quickstart/_index.md
@@ -16,12 +16,11 @@ no_list: true
                 <h4 class="card-title">
                     <a href='{{< relref "./java/" >}}'>Java 微服务开发入门</a>
                 </h4>
-                    <p> </p>
+                    <p>通过以下教程快速上手 Dubbo Java 开发:</p>
                     <p><a href='{{< relref "./java/brief" >}}'>1 - 快速部署</a></p>
                     <p><a href='{{< relref "./java/api" >}}'>2 - 基于 Dubbo API 
开发</a></p>
                     <p><a href='{{< relref "./java/spring-boot" >}}'>3 - 基于 
Dubbo x Spring Boot 开发</a></p>
                     <p><a href='{{< relref "./java/spring-xml" >}}'>4 - 基于 
Dubbo x Spring XML 开发</a></p>
-                <p></p>
             </div>
         </div>
     </div>
@@ -31,7 +30,10 @@ no_list: true
                 <h4 class="card-title">
                     <a href='{{< relref "./go/" >}}'>Go 微服务开发入门</a>
                 </h4>
-                <p>在服务初次调用失败后,通过重试能有效的提升总体调用成功率。</p>
+                    <p>通过以下教程快速上手 Dubbo Go 开发:</p>
+                    <p><a href='{{< relref "./go/install" >}}'>1 - 安装 Dubbo-go 
开发环境</a></p>
+                    <p><a href='{{< relref "./go/quickstart_triple" >}}'>2 - 
完成一次 RPC 调用</a></p>
+                    <p><a href='{{< relref 
"./go/quickstart_triple_with_customize" >}}'>3 - 完成一次自己定义接口的 RPC 调用</a></p>
             </div>
         </div>
     </div>
diff --git a/content/zh-cn/overview/quickstart/go/_index.md 
b/content/zh-cn/overview/quickstart/go/_index.md
index 50a71b4047..a53889a5cd 100755
--- a/content/zh-cn/overview/quickstart/go/_index.md
+++ b/content/zh-cn/overview/quickstart/go/_index.md
@@ -3,4 +3,46 @@ type: docs
 title: "Go 微服务开发入门"
 linkTitle: "Go"
 weight: 20
+no_list: true
 ---
+
+{{< blocks/section color="white" height="auto">}}
+<div class="td-content list-page">
+    <div class="lead"></div><header class="article-meta">
+    </header><div class="row">
+    <div class="col-sm col-md-6 mb-4">
+        <div class="h-100 card shadow" href="#">
+            <div class="card-body">
+                <h4 class="card-title">
+                     <a href='{{< relref "./install" >}}'>安装 Dubbo-go 开发环境</a>
+                </h4>
+                <p>了解和安装 dubbogo-cli 工具</p>
+            </div>
+        </div>
+    </div>
+    <div class="col-sm col-md-6 mb-4">
+        <div class="h-100 card shadow" href="#">
+            <div class="card-body">
+                <h4 class="card-title">
+                     <a href='{{< relref "./quickstart_triple" >}}'>完成一次 RPC 
调用</a>
+                </h4>
+                <p>快速上手启动一个基于 Dubbo-go 的微服务应用</p>
+            </div>
+        </div>
+    </div>
+    <div class="col-sm col-md-6 mb-4">
+        <div class="h-100 card shadow" href="#">
+            <div class="card-body">
+                <h4 class="card-title">
+                     <a href='{{< relref "./quickstart_triple_with_customize" 
>}}'>完成一次自己定义接口的 RPC 调用</a>
+                </h4>
+                <p>从零上手开发一个基于 Dubbo-go 的微服务应用</p>
+            </div>
+        </div>
+    </div>
+</div>
+<hr>
+</div>
+
+{{< /blocks/section >}}
+
diff --git a/content/zh-cn/overview/quickstart/go/install.md 
b/content/zh-cn/overview/quickstart/go/install.md
new file mode 100644
index 0000000000..9057c6b089
--- /dev/null
+++ b/content/zh-cn/overview/quickstart/go/install.md
@@ -0,0 +1,48 @@
+---
+type: docs
+title: 安装 Dubbo-go 开发环境
+weight: 1
+description: 1 - 安装 Dubbo-go 开发环境
+---
+### 1. 安装Go语言环境
+
+建议使用最新版 go 1.17
+
+go version >= go 1.15
+
+[【Go 语言官网下载地址】](https://golang.google.cn/)
+
+将 $GOPATH/bin 加入环境变量
+
+### 2. 安装序列化工具protoc
+
+[【protoc 下载地址】](https://github.com/protocolbuffers/protobuf/releases)
+
+### 3. 安装 dubbogo-cli 以及相关插件
+
+执行以下指令安装dubbogo-cli 至 $GOPATH/bin
+
+```bash
+$ export GOPROXY="https://goproxy.cn";
+$ go install github.com/dubbogo/dubbogo-cli@latest
+$ dubbogo-cli 
+hello
+```
+
+安装依赖的工具插件
+
+```bash
+$ dubbogo-cli install all            
+```
+
+确保上述安装的工具位于在系统环境变量内
+
+```bash
+$ protoc --version
+libprotoc 3.14.0
+$ protoc-gen-go --version
+protoc-gen-go v1.26.0
+$ protoc-gen-go-triple --version
+protoc-gen-go-triple 1.0.8
+```
+
diff --git a/content/zh-cn/overview/quickstart/go/quickstart_triple.md 
b/content/zh-cn/overview/quickstart/go/quickstart_triple.md
new file mode 100644
index 0000000000..f3e2be412b
--- /dev/null
+++ b/content/zh-cn/overview/quickstart/go/quickstart_triple.md
@@ -0,0 +1,120 @@
+---
+type: docs
+title: 完成一次 RPC 调用
+weight: 2
+description: 2 - 完成一次 RPC 调用
+---
+
+
+## 1. 生成 Demo 项目
+
+使用安装好的 dubbogo-cli 工具,创建demo工程。
+
+```bash
+$ mkdir quickstart
+$ cd quickstart 
+$ dubbogo-cli newDemo .
+$ tree .
+.
+├── api
+│   ├── samples_api.pb.go
+│   ├── samples_api.proto
+│   └── samples_api_triple.pb.go
+├── go-client
+│   ├── cmd
+│   │   └── client.go
+│   └── conf
+│       └── dubbogo.yaml
+├── go-server
+│   ├── cmd
+│   │   └── server.go
+│   └── conf
+│       └── dubbogo.yaml
+└── go.mod
+```
+
+可看到生成的项目中包含一个 client 项目和一个 server 项目,以及相关的配置文件。
+
+### 1.1 查看接口描述文件 helloworld.proto
+
+```protobuf
+syntax = "proto3";
+package api;
+
+option go_package = "./;api";
+
+// The greeting service definition.
+service Greeter {
+  // Sends a greeting
+  rpc SayHello (HelloRequest) returns (User) {}
+  // Sends a greeting via stream
+  rpc SayHelloStream (stream HelloRequest) returns (stream User) {}
+}
+
+// The request message containing the user's name.
+message HelloRequest {
+  string name = 1;
+}
+
+// The response message containing the greetings
+message User {
+  string name = 1;
+  string id = 2;
+  int32 age = 3;
+}
+```
+
+demo项目中,默认生成了一个接口描述文件,接口服务名为 api.Greeter, 包含两个 RPC 方法,入参为 HelloRequest,返回值为 
User,两个方法分别为普通 RPC 方法和 Streaming 类型 RPC 方法。
+
+### 1.2 (*可选) 使用安装好的编译工具编译 pb 接口
+
+```bash
+$ cd api
+$ protoc --go_out=. --go-triple_out=. ./samples_api.proto
+```
+
+参数意义:`--go_out=.` 使用上述安装的 `protoc-gen-go` 
插件,生成文件到当前目录,`--go-triple_out=.`使用上述安装的 `protoc-gen-go-triple` 插件,生成文件到当前目录。
+
+执行该指令后,会生成两个文件,分别是helloworld.pb (包含 proto 结构) 和 helloworld_triple.pb.go (包含 
triple 协议接口)。
+
+在 demo 工程中,预先生成好了这两个文件,修改 .proto 文件后重新执行命令生成,即可覆盖。
+
+## 2. 开启一次RPC调用
+
+项目根目录执行
+
+```
+$ go mod tidy
+```
+
+拉取到最新的框架依赖:
+
+```go
+module helloworld
+
+go 1.17
+
+require (
+       dubbo.apache.org/dubbo-go/v3 v3.0.1
+       github.com/dubbogo/grpc-go v1.42.9
+       github.com/dubbogo/triple v1.1.8
+       google.golang.org/protobuf v1.27.1
+)
+
+require (
+       ...
+)
+
+```
+
+先后启动服务端和客户端: 开启两个终端,在 go-server/cmd 和 go-client/cmd 文件夹下分别执行 `go run .` , 
可在客户端看到输出:
+
+```shell
+client response result: name:"Hello laurence" id:"12345" age:21
+```
+
+获得调用结果成功
+
+## 3. 更多
+
+细心的读者可以发现,以上例子编写的的服务端可以接受来自客户端的普通RPC、流式RPC调用请求。目前只编写了普通调用的Client,读者可以根据 
samples 库中的例子来尝试编写流式客户端和服务端。
diff --git 
a/content/zh-cn/overview/quickstart/go/quickstart_triple_with_customize.md 
b/content/zh-cn/overview/quickstart/go/quickstart_triple_with_customize.md
new file mode 100644
index 0000000000..75386340d4
--- /dev/null
+++ b/content/zh-cn/overview/quickstart/go/quickstart_triple_with_customize.md
@@ -0,0 +1,209 @@
+---
+type: docs
+title: 完成一次自己定义接口的 RPC 调用
+weight: 3
+description: 3 - 完成一次 RPC 调用自己定义接口的版本
+---
+
+## 1.概述
+我们本章来实现一个简单的小需求,实现一个分布式ID生成服务,通过该服务可以获取分布式ID
+(假设的分布式ID,我们不探讨ID的生成方案和算法,这里直接使用uuid代替,只为演示自定义服务的创建)
+
+## 2. 服务端实现
+首先使用 dubbogo-cli 创建 IDC 服务
+```bash
+dubbogo-cli newApp IDC
+cd IDC
+tree .
+
+.
+├── Makefile
+├── api
+│   ├── api.pb.go
+│   ├── api.proto
+│   └── api_triple.pb.go
+├── build
+│   └── Dockerfile
+├── chart
+│   ├── app
+│   │   ├── Chart.yaml
+│   │   ├── templates
+│   │   │   ├── _helpers.tpl
+│   │   │   ├── deployment.yaml
+│   │   │   ├── service.yaml
+│   │   │   └── serviceaccount.yaml
+│   │   └── values.yaml
+│   └── nacos_env
+│       ├── Chart.yaml
+│       ├── templates
+│       │   ├── _helpers.tpl
+│       │   ├── deployment.yaml
+│       │   └── service.yaml
+│       └── values.yaml
+├── cmd
+│   └── app.go
+├── conf
+│   └── dubbogo.yaml
+├── go.mod
+├── go.sum
+└── pkg
+    └── service
+        └── service.go
+
+```
+
+我们编辑proto定义我们的接口
+
+```protobuf
+syntax = "proto3";
+package api;
+
+option go_package = "./;api";
+
+service Generator {
+  rpc GetID (GenReq) returns (GenResp) {}
+}
+
+message GenReq {
+  string appId = 1;
+}
+
+message GenResp {
+  string id = 1;
+}
+```
+
+生成代码
+
+```bash
+$ cd api
+$ protoc --go_out=. --go-triple_out=. ./api.proto
+```
+
+我们来调整service
+目录:pkg/service/service.go
+修改后的代码如下
+
+```go
+type GeneratorServerImpl struct {
+       api.UnimplementedGeneratorServer
+}
+
+func (s *GeneratorServerImpl) GetID(ctx context.Context, in *api.GenReq) 
(*api.GenResp, error) {
+       logger.Infof("Dubbo-go GeneratorProvider AppId = %s\n", in.AppId)
+       uuid, err := uuid.NewV4()
+       if err != nil {
+               logger.Infof("Dubbo-go GeneratorProvider get id err = %v\n", 
err)
+               return nil, err
+       }
+       return &api.GenResp{Id: uuid.String()}, nil
+}
+
+func init() {
+       config.SetProviderService(&GeneratorServerImpl{})
+}
+```
+同时,我们调整conf/dubbogo.yaml中的provider部分,
+```yaml
+dubbo:
+  registries:
+    nacos:
+      protocol: nacos
+      address: 127.0.0.1:8848
+  protocols:
+    triple:
+      name: tri
+      port: 20000
+  provider:
+    services:
+      GeneratorServerImpl:
+        interface: "" # read from stub
+```
+我们需要拉起一个依赖的注册中心,nacos,如果你有现成的,本步骤可以忽略,我们使用docker来快速启动一个nacos,
+
+```bash
+git clone https://github.com/nacos-group/nacos-docker.git
+cd nacos-docker
+docker-compose -f example/standalone-derby.yaml up
+```
+
+最后,我们启动服务端。
+```go
+export DUBBO_GO_CONFIG_PATH=conf/dubbogo.yaml 
+go run cmd/app.go  
+```
+打开nacos的控制台,可以看到服务已经注册
+![img](/imgs/docs3-v2/golang-sdk/quickstart/nacos.jpg)
+
+
+## 2. 客户端使用
+首先,我们可以共享我们的服务端的api给客户端,并生成相关的代码(这里可以根据实际项目需要,共享共享proto,每个consumer自行生成代码,或统一生成sdk后给依赖的服务引入)
+客户端目录如下:
+```bash
+.
+├── api
+│   ├── api.pb.go
+│   ├── api.proto
+│   └── api_triple.pb.go
+├── cmd
+│   └── client.go
+├── conf
+│   └── dubbogo.yml
+├── go.mod
+├── go.sum
+
+```
+api目录同服务端的api目录
+client.go 代码如下
+```go
+
+var grpcGeneratorImpl = new(api.GeneratorClientImpl)
+
+func main() {
+       config.SetConsumerService(grpcGeneratorImpl)
+       if err := config.Load(); err != nil {
+               panic(err)
+       }
+
+       logger.Info("start to test dubbo")
+       req := &api.GenReq{
+               AppId: "laurence",
+       }
+       reply, err := grpcGeneratorImpl.GetID(context.Background(), req)
+       if err != nil {
+               logger.Error(err)
+       }
+       logger.Infof("get id result: %v\n", reply.Id)
+}
+
+```
+
+dubbogo.yml 如下
+```yaml
+dubbo:
+  registries:
+    nacos:
+      protocol: nacos
+      address: 127.0.0.1:8848
+  consumer:
+    references:
+      GeneratorClientImpl:
+        protocol: tri
+        interface: ""
+```
+
+运行client,获取id,如下:
+
+```bash
+export DUBBO_GO_CONFIG_PATH=conf/dubbogo.yml
+go run cmd/client.go
+……
+……
+2022-12-30T20:59:19.971+0800    INFO    cmd/client.go:44        start to test 
dubbo
+2022-12-30T20:59:19.982+0800    INFO    cmd/client.go:52        get id result: 
aafd9c73-4014-4d67-a67f-5d107105647b
+
+```
+## 3. 更多
+
+可以发现注册中心我们是使用nacos,当然,我们也可以使用其他的注册中心,更多的使用方式,可以参考[注册中心](/zh-cn/docs3-v2/golang-sdk/tutorial/develop/registry/)
+

Reply via email to