go微服务-go-micro

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Go-Micro是go语言开发的微服务框架

Go-Micro功能特点

  1. 提供了微服务实施的基础框架,包括Rpc、Web、Api,Srv 网关等各类工具。

   2. Broker和异步消息。

   3. Wrapper包装器来处理日志,限流等功能。

   4. Go-Micro提供插件机制,可以安装多种功能插件,例如Rabbitmq插件。

   5. 扩展性强,基于Wrapper模式与中间件实现的。

go-micro 安装

  • go get github.com/micro/micro
  • go get github.com/micro/go-micro
  • go get github.com/micro/protoc-gen-micro

简单hello world程序

hello.proto

syntax = "proto3";
message InfoRequest {
    string username = 1;
}
message InfoResponse {
    string msg = 2;
}
service Hello {
    rpc Info(InfoRequest)returns (InfoResponse) {}
}

server.go

//声明结构体,用来绑方法
type Hello struct{}
func (g *Hello) Info(ctx context.Context, req *pb.InfoRequest, rep *pb.InfoResponse) error {
 rep.Msg = "hello" + req.Username
 return nil
}
func main() {
 //1.得到服务端实例
 service := micro.NewService(
  //设置微服务的名,用来访问
  //micro call hello Hello.Info{"username":"wekenw"}
  //windows: micro call hello Hello.Info{\"username\":\"wekenw\"}
  micro.Name("hello"),
 )
 //2. 初始化
 service.Init() //默认
 //3.服务注册
 err := pb.RegisterHelloHandler(service.Server(), new(Hello))
 if err != nil {
  fmt.Println(err)
 }
 //4.启动服务
 if err := service.Run(); err != nil {
  log.Fatal(err)
 }
}

访问

  • micro call hello Hello.Info{"username":"wekenw"}
  • windows 下
  • micro call hello Hello.Info{\"username\":\"wekenw\"}

生成.go文件

  • proto目录下,命令行,输入命令生成接口文件
  • protoc -I . --micro_out=. --go_out=. ./hello.proto

http 模式

api.proto

syntax = "proto3";
message CallRequest {
    string name = 1;
}
message CallResponse {
    string message = 2;
}
service Example {
    rpc Call(CallRequest)returns(CallResponse);
}
message EmptyRequest {
}
message EmptyResponse {
}
service Foo {
    rpc Bar(EmptyRequest)returns(EmptyResponse) {}
}

server.go

package main
import (
 "context"
 "fmt"
 "github.com/micro/go-micro"
 "github.com/micro/go-micro/errors"
 pb "goMicro/http/proto"
 "log"
)
type Example struct {
}
type Foo struct {
}
func (e *Example) Call(ctx context.Context, req *pb.CallRequest, rsp *pb.CallResponse) error {
 log.Print("收到Example.Call请求")
 if len(req.Name) == 0 {
  return errors.BadRequest("go.micro.api.example", "no name")
 }
 rsp.Message = "Example.Call 接收到了你的请求" + req.Name
 return nil
}
func (f *Foo) Bar(ctx context.Context, req *pb.EmptyRequest, rsp *pb.EmptyResponse) error {
 log.Print("Foo.Bar")
 return nil
}
func main() {
 service := micro.NewService(micro.Name("go.micro.api.example"))
 service.Init()
 err := pb.RegisterExampleHandler(service.Server(), new(Example))
 if err != nil {
  fmt.Println(err)
 }
 err = pb.RegisterFooHandler(service.Server(), new(Foo))
 if err != nil {
  fmt.Println(err)
 }
 if err := service.Run(); err != nil {
  log.Fatal(err)
 }
}

访问

  1. 第一步:启动api服务 micro api --handler=rpc
  2. 第二步:运行服务端代码
  3. image.png
相关文章
|
1月前
|
JavaScript Java Go
探索Go语言在微服务架构中的优势
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出。本文将深入探讨Go语言在构建微服务时的性能优势,包括其在内存管理、网络编程、并发模型以及工具链支持方面的特点。通过对比其他流行语言,我们将揭示Go语言如何成为微服务架构中的一股清流。
128 53
|
3月前
|
Go API Docker
热门go与微服务15
热门go与微服务15
36 2
|
1月前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
1月前
|
Go 数据处理 API
Go语言在微服务架构中的应用与优势
本文摘要采用问答形式,以期提供更直接的信息获取方式。 Q1: 为什么选择Go语言进行微服务开发? A1: Go语言的并发模型、简洁的语法和高效的编译速度使其成为微服务架构的理想选择。 Q2: Go语言在微服务架构中有哪些优势? A2: 主要优势包括高性能、高并发处理能力、简洁的代码和强大的标准库。 Q3: 文章将如何展示Go语言在微服务中的应用? A3: 通过对比其他语言和展示Go语言在实际项目中的应用案例,来说明其在微服务架构中的优势。
|
2月前
|
Cloud Native Go API
Go语言在微服务架构中的创新应用与实践
本文深入探讨了Go语言在构建高效、可扩展的微服务架构中的应用。Go语言以其轻量级协程(goroutine)和强大的并发处理能力,成为微服务开发的首选语言之一。通过实际案例分析,本文展示了如何利用Go语言的特性优化微服务的设计与实现,提高系统的响应速度和稳定性。文章还讨论了Go语言在微服务生态中的角色,以及面临的挑战和未来发展趋势。
|
2月前
|
运维 Go 开发者
Go语言在微服务架构中的应用与优势
本文深入探讨了Go语言在构建微服务架构中的独特优势和实际应用。通过分析Go语言的核心特性,如简洁的语法、高效的并发处理能力以及强大的标准库支持,我们揭示了为何Go成为开发高性能微服务的首选语言。文章还详细介绍了Go语言在微服务架构中的几个关键应用场景,包括服务间通信、容器化部署和自动化运维等,旨在为读者提供实用的技术指导和启发。
|
2月前
|
负载均衡 Go API
探索Go语言在微服务架构中的应用与优势
在这篇技术性文章中,我们将深入探讨Go语言(又称为Golang)在构建微服务架构时的独特优势。文章将通过对比分析Go语言与其他主流编程语言,展示Go在并发处理、性能优化、以及开发效率上的优势。同时,我们将通过一个实际的微服务案例,详细说明如何利用Go语言构建高效、可扩展的微服务系统。
|
2月前
|
安全 Go 云计算
探索Go语言在微服务架构中的应用与优势
在本文中,我们将深入探讨Go语言(又称为Golang)在构建微服务架构中的独特优势。文章将分析Go语言的并发模型、简洁的语法以及高效的编译速度,以及这些特性如何使其成为微服务架构的理想选择。我们将通过一个简单的微服务示例,展示Go语言在实际开发中的表现,并讨论其在性能和可维护性方面的优势。
|
2月前
|
消息中间件 监控 Go
Go语言在微服务架构中的优势与实践
【10月更文挑战第10天】Go语言在微服务架构中的优势与实践
|
2月前
|
Java Go 数据库
Go语言在微服务架构中的优势与实践
【10月更文挑战第10天】Go语言在微服务架构中的优势与实践