• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

go-micro入门

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

安装go-micro

1.安装服务发现能力,docker安装consul

docker run -d --net=host -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}'  --name consul_server  consul agent -server -bind=192.168.0.111 -bootstrap-expect=1  -node=node1 -client 0.0.0.0 -ui

输入http://192.168.0.111:8500 能看到consul的UI页面表示正常启动

基础知识

go的包管理工具一直被人诟病。不像PHP的composer和node的npm那样好使。

https://segmentfault.com/a/1190000018389353?utm_source=tag-newest

go1.5版本之前没有包管理,都是基于GOPATH来进行依赖库管理的。
于是从 Golang1.5 开始推出 vendor 文件夹机制。
从 Golang1.6 正式开启这个功能。
Golang 1.11 开始, 实验性出现了可以不用定义 GOPATH 的功能,且官方有 go mod 支持。Golang 1.12 更是将此特征正式化。
也就是go mod 以后是主流,官方加持buff

配置go mod 代理

在国内拉go的包真的费劲。这个一定要配。
http://goproxy.io/
在goland里配置
可以参考下面新建vgo项目时直接配置上Proxy。
配置完如果没有生效的话,重启goland即可

Hello World

请记住我们脑子里只有go mod 这一个包管理工具。
以下为使用goland创建hello world的例子。

  1. 创建项目

    项目目录里会出现go.mod文件

  2. 创建main.go文件,把以下代码拷贝进去。

package main
import (
	"github.com/micro/go-micro"
)
func main()  {
}
  1. import那里肯定报红,按alt+enter,选择sync package 同步包的操作。
    就会把依赖的包下载到GOPATH/pkg/mod里,也会在项目的External Libraries的Go Modules里创建索引。
    同步完包以后就不会报红了。根目录下会生成go.sum文件。
    也可以查看go.mod,查看项目的依赖关系。
以上步骤就是利用go mod来管理项目包依赖的。
创建项目就相当于在非GOPATH路径下新建一个项目文件夹,执行了 go mod init hello命令
同步包操作相当于执行了 go mod download命令
还有一些有用的 go mod tidy 删除没有用的依赖,增加新的依赖关系
接下来我们来创建go micro的hello 服务
  1. 因为go micro 使用了Google Protocol Buffer( 简称 Protobuf),安装protobuf、
    https://github.com/protocolbuffers/protobuf/releases
    在这里找到适合自己平台的版本。
    win下记得加入系统path里。
Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。

同时在命令行里输入以下命令,分别安装protoc-gen-micro和protobuf/protoc-gen-go
go install github.com/micro/protoc-gen-micro
go install github.com/golang/protobuf/protoc-gen-go

2.在项目根目录创建proto目录,里面创建hello.proto文件

syntax = "proto3";

service Hello {
    rpc Hello(HelloRequest) returns (HelloResponse) {}
}

message HelloRequest {
    string name = 1;
}

message HelloResponse {
    string greeting = 2;
}

3.进入proto目录,执行命令protoc --micro_out=. --go_out=. hello.proto自动生成代码。

4.修改main.go代码,复制以下代码

package main

import (
	"context"
	"fmt"
	"github.com/micro/cli"
	"github.com/micro/go-micro"
	"os"
	proto "test/proto"
)

type Hello struct {
}

func (g *Hello) Hello(ctx context.Context, req *proto.HelloRequest, rsp *proto.HelloResponse) error {
	rsp.Greeting = "Hello " + req.Name
	return nil
}

func runClient(service micro.Service) {
	// Create new greeter client
	greeter := proto.NewHelloService("hello", service.Client())

	// Call the greeter
	rsp, err := greeter.Hello(context.TODO(), &proto.HelloRequest{Name: "John"})
	if err != nil {
		fmt.Println(err)
		return
	}

	// Print response
	fmt.Println(rsp.Greeting)
}

func main() {
	service := micro.NewService(
		micro.Name("hello"),
		micro.Version("latest"),
		micro.Metadata(map[string]string{
			"type": "helloword",
		}),
		micro.Flags(cli.BoolFlag{
			Name:  "run_client",
			Usage: "Launch the client",
		}),
	)
	service.Init(
		micro.Action(func(c *cli.Context) {
			if c.Bool("run_client") {
				runClient(service)
				os.Exit(0)
			}
		}),
	)
	proto.RegisterHelloHandler(service.Server(), new(Hello))

	// Run the server
	if err := service.Run(); err != nil {
		fmt.Println(err)
	}
}

5.启动hello服务go run main.go

表示服务启动成功

6.运行hello客户端 go run main.go --run_client


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
vscodego开发主要插件发布时间:2022-07-10
下一篇:
chaosblade-exec-os项目的burnio.go文件解读发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap