string username = 1; string token = 2; string nickname = 3; }
### 生成rpc文件
注意以下命令是在项目的根目录执行的,如果你在其它目录记得修改`--go_out`及`--micro_out`目录,`--go_out`与`--micro_out`的目录都是相对于执行命令所在的目录的
protoc --go_out=./proto --micro_out=./proto ./proto/user.proto
### 编写main.go
package main
import ( "context" "github.com/micro/go-micro/v2" "log" "microdemo/proto" )
type Service struct { }
func (s *Service) Register(ctx context.Context, req *proto.RegisterRequest, res *proto.RegisterResponse) error { res.Username = req.Username res.Token = "13123412" res.Nickname = req.Nickname return nil }
func main() { // 实例化 srv := micro.NewService(micro.Name("user"), micro.Address("127.0.0.1:8001")) // 初始化 srv.Init() // 注册服务 err := proto.RegisterUserHandler(srv.Server(), new(Service)) if err != nil { log.Fatalln("注册服务失败", err) } // 运行服务 err = srv.Run() if err != nil { log.Fatalln("启动服务失败", err) } }
这里没有配置注册中心,因此使用的是micro默认的mdns作为注册中心,后面会讲使用其他注册中心。
### 编写client.go
package main
import ( "context" "fmt" "github.com/micro/go-micro/v2" "log" "microdemo/proto" )
func main() { // 实例化 srv := micro.NewService(micro.Name("user.client")) // 初始化 srv.Init() // 调用其他服务 user := proto.NewUserService("user", srv.Client()) res, err := user.Register(context.TODO(), &proto.RegisterRequest{ Username: "18232587802", Password: "123456", Nickname: "王小明", }) if err != nil { log.Fatalln("调用服务出错", err) } fmt.Println(res) }
### 运行测试
运行main.go

运行client.go

可以看到正常打印出了结果,说明客户端调用服务端成功了。
注意:要先运行main.go启动user服务,然后再运行client.go客户端调用服务,否则会提示服务未发现。
说明:我在自己一个windows电脑上使用mdns注册中心,客户端发现不了服务,另一个windows电脑上可以正常发现,目前还没有调试出问题在哪,后续有结果会补充。因此gitee仓库中的演示中包含使用consul注册中心的代码,大家使用mdns作为注册中心演示时需要注释掉consul注册中心的代码。
### 演示代码
<https://gitee.com/zjq528/micro-study/tree/master/microdemo>


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://gitee.com/vip204888)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**