The following column will introduce you to the method of setting up the go-micro development environment from the Golang Tutorial column. I hope it will be helpful to friends in need!
#Recently, because I have to use go-micro, I am learning about microservices. This article records the construction process of micro.
micro provides a runtime, which needs to be installed before using go-micro. There are several ways to install it
go get github.com/micro/micro/v2
I can’t install it this way. It’s not due to the network. I don’t know where the conflict is. . .
docker pull micro/micro
# MacOS curl -fsSL https://raw.githubusercontent.com/micro/micro/master/scripts/install.sh | /bin/bash # Linux wget -q https://raw.githubusercontent.com/micro/micro/master/scripts/install.sh -O - | /bin/bash # Windows powershell -Command "iwr -useb https://raw.githubusercontent.com/micro/micro/master/scripts/install.ps1 | iex"
It is recommended to use this method to download and install, compile A good binary package can be used directly by adding it to the environment variable. If you don’t want to use a script to install, you can download it from the release page of github
https://github.com/micro/micro/releases
Now that the micro is installed, let’s test it.
micro web
Output
$ micro web2020-07-05 04:24:16 file=http/http.go:90 level=info service=web HTTP API Listening on [::]:80822020-07-05 04:24:16 file=v2@v2.9.1/service.go:200 level=info service=web Starting [service] go.micro.web2020-07-05 04:24:16 file=grpc/grpc.go:864 level=info service=web Server [grpc] Listening on [::]:264492020-07-05 04:24:16 file=grpc/grpc.go:697 level=info service=web Registry [mdns] Registering node: go.micro.web-b76a12a1-5226-429f-9633-ce304f179657
Now visit localhost:8082
to view the micro’s web page.
protoc is the compiler of protobuf, and protobuf is a format used to transmit data, similar to json and xml.
protoc download address
https://github.com/protocolbuffers/protobuf/releases
After downloading, there is a protoc executable file in the bin folder. Add this to the environment variable. (You can just put it directly in a folder that has added environment variables. This can avoid the computer being filled with various environment variables, and putting commonly used tools in a folder is also convenient for management)
Recommended: "go Language"
There is also protoc-gen-go that needs to be put in. You can download it in the following way.
go get -u github.com/golang/protobuf/proto go get -u github.com/golang/protobuf/protoc-gen-go
Now let’s write a demo to practice.
There are three files in total, server.go
, client.go
, greeter.proto
syntax = "proto3";package protos;service Greeter { rpc Hello (Request) returns (Response){};}message Request { string name = 1;}message Response { string greeting = 2;}
package mainimport ( "context" "fmt" "github.com/micro/go-micro/v2")type Greeter struct {}func (g *Greeter) Hello(context context.Context, req *Request, rsp *Response) error { rsp.Greeting = "Hello " + req.Name return nil}func main() { service := micro.NewService( micro.Name("greeter"), ) service.Init() err := RegisterGreeterHandler(service.Server(), new(Greeter)) if err != nil { fmt.Println(err) } if err := service.Run(); err != nil { fmt.Println(err) }}
package mainimport ( "context" "fmt" "github.com/micro/go-micro/v2")func main() { service := micro.NewService(micro.Name("greeter.client")) service.Init() greeter := NewGreeterService("greeter", service.Client()) rsp, err := greeter.Hello(context.TODO(), &Request{Name: "Zaun pianist"}) if err != nil { fmt.Println(err) } fmt.Println(rsp.Greeting)}
Highly recommended Use go mod to manage dependencies. The project updates very quickly. Many tutorials on Baidu no longer work. There are various errors during the installation process
This is my mod filemodule hello go 1.14require ( github.com/golang/protobuf v1.4.0 github.com/micro/go-micro/v2 v2.9.1 google.golang.org/protobuf v1.22.0)
Note that my greeter.proto, server.go, and client.go files are placed in the same folder
protoc --micro_out=. --go_out=. greeter.proto
go run ./ cannot be used. As for why the other two are added, this is a requirement of the go language compiler. You must specify what is needed for compilation. document.
go run server.go greeter.pb.go greeter.pb.micro.go
micro list services
micro web
$ micro list services go.micro.web greeter
go run client.go greeter.pb.go greeter.pb.micro.go
{"id":"go.micro.client","code":408,"detail":"context deadline exceeded","status":"Request Timeout"}panic: runtime error: invalid memory address or nil pointer dereference[signal 0xc0000005 code=0x0 addr=0x28 pc=0xeef454]
micro get service greeter
$ micro get service greeter service greeter version latest ID Address Metadata greeter-5d86321e-86f2-41a6-8230-f015466bf791 10.198.75.60:51395 broker=http,protocol=grpc,registry=mdns,server=grpc,transport=grpc Endpoint: Greeter.Hello Request: { message_state MessageState { no_unkeyed_literals NoUnkeyedLiterals do_not_compare DoNotCompare do_not_copy DoNotCopy message_info MessageInfo } int32 int32 unknown_fields []uint8 name string } Response: { message_state MessageState { no_unkeyed_literals NoUnkeyedLiterals do_not_compare DoNotCompare do_not_copy DoNotCopy message_info MessageInfo } int32 int32 unknown_fields []uint8 greeting string }
10.198.xx , is this why an error is reported? ? ? Therefore, when registering the service, specify the IP address
go run server.go greeter.pb.go greeter.pb.micro.go --server_address=localhost:8888
$ go run client.go greeter.pb.go greeter.pb.micro.go Hello Zaun pianist
The above is the detailed content of How to set up go-micro development environment. For more information, please follow other related articles on the PHP Chinese website!