更多详细示例请直接访问Dubbo官网或搜索关注官方微信公众号:ApacheDubbo1.它Go语言环境安装建议使用最新版本的go1.17goversion>=go1.15【Go语言官网下载地址】环境变量中添加$GOPATH/bin2.安装序列化工具protoc【protoc下载地址]3.安装dubbogo-cli及相关插件执行如下指令安装dubbogo-cli到$GOPATH/bin$exportGOPROXY="https://goproxy.cn"$goinstallgithub.com/dubbogo/dubbogo-cli@latest$dubbogo-clihello安装依赖工具插件$dubbogo-cliinstallall确保以上安装工具位于系统环境变量$protoc--versionlibprotoc3.14.0$protoc-gen-go--versionprotoc-gen-gov1.26.0$protoc-gen-go-triple--versionprotoc-gen-go-triple1.0.84。生成Demo工程使用安装好的dubbogo-cli工具创建一个demo工程。$mkdirquickstart$cdquickstart$dubbogo-clinewDemo.$tree..├──api│├──samples_api.pb.go│├──samples_api.proto│└──samples_api_triple.pb.go├──go-客户端│├──cmd││└──client.go│└──conf│└──dubbogo.yaml├──go-server│├──cmd││└──server.go│└──conf│└──dubbogo.yaml└──go.mod可以看到生成的工程包含客户端工程和服务端工程,以及相关的配置文件。4.1查看接口描述文件helloworld.protosyntax="proto3";packageapi;optiongo_package="./;api";//问候服务定义.serviceGreeter{//发送一个问候rpcSayHello(HelloRequest)returns(User){}//通过流发送问候rpcSayHelloStream(streamHelloRequest)returns(streamUser){}}//包含用户名的请求消息。messageHelloRequest{stringname=1;}//包含问候消息的响应消息User{stringname=1;字符串ID=2;int32age=3;}在demo工程中,默认生成一个接口描述文件。接口服务名称为api.Greeter,包含两个RPC方法,入参为HelloRequest,返回值为User,两个方法分别为普通RPC方法和Streaming类型RPC方法。4.2(*可选)使用安装的编译工具编译pb接口$cdapi$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(包含三重协议接口)。在演示项目中,这两个文件是预先生成的。修改.proto文件后,再次执行命令generation覆盖即可。5.打开一个RPC调用项目根目录执行$gomodtidy拉取最新的框架依赖:modulehelloworldgo1.17require(dubbo.apache.org/dubbo-go/v3v3.0.1github.com/dubbogo/grpc-gov1.42.9github.com/dubbogo/triplev1.1.8google.golang.org/protobufv1.27.1)require(...)依次启动服务端和客户端:打开两个终端,go-server/cmd和Executego分别在go-client/cmd文件夹下运行,可以在客户端看到输出:clientresponseresult:name:"Hellolaurence"id:"12345"age:21调用结果成功获取6.比较细心的读者可以发现,上面例子中写的服务端可以接受来自客户端的普通RPC和流式RPC调用请求。目前只写了普通调用的Client。读者可以根据示例库中的示例尝试编写流式客户端和服务器。更多示例请参考dubbo-go-samples搜索并关注官方微信公众号:ApacheDubbo,了解更多行业最新动态,掌握各大厂面试必备的Dubbo技能
