一、基础环境
备注,本人是先将go的环境卸载了,删除了
go path
目录下的全部文件来配置的,如果你有之前的环境可能会有相互影响的
-
mac
操作系统 -
go
的版本go version go1.14.14 darwin/amd64
-
编辑器使用的是
goland2020.1
二、protobuf
环境的配置
-
2、使用命令
go env
查看自己的go path
地址并且在go path
的目录下创建一个bin
文件夹 -
3、将第一点下载下来的东西解压出来将
bin
下面的protoc
拷贝到go path
下的bin
文件夹下 -
4、查看安装的版本
protoc --version
-
5、
protoc-gen-go
的安装(用于生成对应go
语言的micro
代码)go get -u github.com/golang/protobuf/proto go get -u github.com/golang/protobuf/protoc-gen-go go get github.com/micro/micro/v2/cmd/protoc-gen-micro
-
6、查看
go path
下的bin
目录下会有以下几个文件➜ bin tree . . ├── protoc ├── protoc-gen-go └── protoc-gen-micro 0 directories, 3 files ➜ bin
三、测试protobuf
-
1、创建一个
say.proto
的文件syntax = "proto3"; package go_micro_demo; // 创建服务 service Say { rpc SayHello(SayReq) returns (SayRes) {} } message SayReq { string message = 1; } message SayRes { string answer = 1; }
-
2、在文件所在的黑窗口执行命令
# 使用下面这个命令会生成一个say.pb.go的文件 # protoc 文件名 --go_out=. protoc say.proto --go_out=. # 如果要生成python文件 # protoc say.proto --python_out=. # 生成微服务需要的文件 protoc --go_out=. --micro_out=. say.proto
-
3、最后可以生成这样的文件目录表示你配置成功了
➜ say tree . . ├── say.pb.go ├── say.pb.micro.go └── say.proto 0 directories, 3 files ➜ say
四、第一个简单的微服务程序
-
1、使用
goland
创建一个mod
工程 -
2、基本目录
➜ go_micro_demo tree . . ├── client.go ├── go.mod ├── proto │ └── say │ └── say.proto └── service.go 2 directories, 4 files
-
3、使用上面的命令将
proto
文件生成对应的go
代码 -
4、安装微服务依赖包
go get github.com/micro/go-micro/v2
-
5、服务器端的编写
package main import ( "context" "fmt" "github.com/micro/go-micro/v2" go_micro_demo "go_micro_demo/proto/say" ) type SayServer struct { } // SayHello方法去say.pb.micro.go文件中(RegisterSayHandler)中复制 func (s *SayServer) SayHello(ctx context.Context, in *go_micro_demo.SayReq, out *go_micro_demo.SayRes) error { out.Answer = "服务器端接收的数据:\"" + in.Message + "\"" return nil } func main() { // 1.创建服务 service := micro.NewService(micro.Name("say.hello.server")) // 2.初始化服务 service.Init() // 3.注册微服务 go_micro_demo.RegisterSayHandler(service.Server(), new(SayServer)) // 4.运行微服务 if err := service.Run(); err != nil { fmt.Println(err) } }
-
6、客户端的编写
package main import ( "context" "fmt" "github.com/micro/go-micro/v2" go_micro_demo "go_micro_demo/proto/say" ) func main() { // 1.实例化 service := micro.NewService(micro.Name("say.hello.client")) // 2.初始化 service.Init() // 3.连接到对应的服务端 sayServer := go_micro_demo.NewSayService("say.hello.server", service.Client()) // 4.调用方法通讯 res, err := sayServer.SayHello(context.TODO(), &go_micro_demo.SayReq{ Message: "我是客户端"}) if err != nil { fmt.Println("连接错误") } fmt.Println(res) }
五、使用docker
创建的微服务项目
-
1、查找镜像并下载镜像
docker search micro/micro docker pull micro/micro
-
2、使用
docker
命令创建微服务项目在你需要创建项目的文件夹下运行
# docker run --rm -v $(pwd):$(pwd) -w $(pwd) micro/micro new [项目名称] # 下面是创建一个用户项目 docker run --rm -v $(pwd):$(pwd) -w $(pwd) micro/micro new user
-
3、将
proto
文件生成go
文件-
先将
proto
文件中的修改为// 表示生成一个user的文件夹生成user的文件 option go_package = "user;user";
-
运行命令
protoc --go_out=. --micro_out=. user.proto
-
-
4、将创建出来的项目把
v3
改为v2
版本-
go.mod
文件中修改的地方// github.com/micro/micro/v3 v3.0.0 github.com/micro/go-micro/v2 v2.9.1
-
修改
main.go
文件
-
修改
handler
下对外的文件
-
-
5、下载最新的依赖包
go mod tidy
-
6、运行
main.go
文件测试