商业公链之区块链技术使用的常见库(十)------Go语言微服务库 "github.com/micro/go-micro”

Micro In Action:项目结构与启动过程 文章目录项目结构启动过程解析查看运行时状态总结参考资料 项目结构 在上篇文章中我们创建了一个简单的项目, 并过将它运行起来。本篇将继续这个旅程,先介绍项目结构及其中每个文件的用途。 项目结构如下: . ├── main.go ├── generate.go ├── plugin.go ├── proto/hello │ └── hello.proto │ └── hello.pb.go │... 阅读详情

Go语言微服务库 github.com/micro/go-micro

由于Grpc存在ip和具体服务绑定,一旦服务ip改变,客户端代码也要改变,管理麻烦。同时,存在服务发现和服务间调用问题。直接使用实现了服务注册的 go-micro 框架。Micro是一套微服务构建工具库。对于微服务架构的应用,Micro提供平台层面、高度弹性的工具组件,让服务开发者们可以把复杂的分布式系统以简单的方式构建起来,并且尽可能让开发者使用最少的时间完成基础架构的构建。

安装微服务:

安装Go Micro

是基于Go语言用于开发的微服务的RPC框架。go get github.com/micro/go-micro

安装micro:微服务管理工具

micro是以go-micro框架为核心的微服务管理工具,通过它可以方便查看go-micro服务情况。在$GOPATH目录下,执行go get github.com/micro/micro,该命令会在bin目录($GOBIN)下生成micro(.exe)工具,micro命令行工具可以提供诸如服务列表查看、服务详情查看、调用服务接口等功能。

安装依赖

依赖服务发现能力,默认使用Consul,下载链接:https://link.jianshu.com/?t=https%3A%2F%2Fwww.consul.io%2Fdownloads.html,之后可以将路径添加到path中。运行consul:启动Consul agent的开发模式:consul agent -dev。该命令快速启动一个单节点的consul,且为集群的领袖

查看Consul集群的成员:打开另一个终端执行:consul members。

停止Agent:使用 Ctrl-C,优雅的关闭Agent。

也可以通过WebUI来查看各service状态:http://localhost:8500/。

基于组播DNS,我们可以实现零依赖的服务发现。当启动参数--registry=mdns加到启动命令中,比如:micro --registry=mdns list services,不推荐。

安装goprotobuf相关工具,GRPC相关工具,提供字节传输格式,安装包在这里https://github.com/google/protobuf/releases,下载Windows下的压缩包,解压加环境变量即可使用exe文件来使用Protobuf的生成工具了。

protoc-gen-go:goprotobuf 提供的 Protobuf 插件:在$GOPATH目录下执行go get github.com/micro/protobuf/{proto,protoc-gen-go},该命令会在bin目录下生成protoc-gen-go(.exe)工具,protoc编译器利用protoc-gen-go插件将.proto文件转换为Golang源文件

protoc-gen-micro(Protobuf code generation for micro):在$GOPATH目录下执行go get github.com/micro/protoc-gen-micro,该命令会在bin目录下生成protoc-gen-micro(.exe),protoc编译器利用protoc-gen-micro插件将.proto文件转换为micro代码风格文件。

goprotobuf编译参数:

-I参数:指定import路径,可以指定多个-I参数,编译时按照顺序查找,不指定时默认查找当前目录

--go_out:Golang编译支持,支持以下参数

- `plugins=plugin1+plugin2`:指定插件,支持grpc/micro,即:plugins=grpc+micro

- `M`参数:指定导入的.proto文件路径编译后对应的goalng包名(不指定默认.proto文件中import语句路径)

- `import_prefix=xxx`:为所有import路径添加前缀,主要用于编译子目录内的多个proto文件

- `import_path=foo/bar`:指定未声明package或go_package的文件的包名,最右边的斜线前的字符会被忽略。

编写go微服务

导入微服务库

import "github.com/micro/go-micro"

创建微服务

service := micro.NewService()

初始化微服务

service := micro.NewService(

       micro.Name("greeter"), //服务名字

       micro.Version("latest"), //版本

)

命令行参数micro.Flags传递配置参数:

service := micro.NewService(

        micro.Flags(

                cli.StringFlag{

                        Name:  "environment",

                        Usage: "The environment",

                },

        )

)

解析命令行标识参数可以使用service.Init,增加标识参数可以使用micro.Action选项:

service.Init(

        micro.Action(func(c *cli.Context) {

                env := c.StringFlag("environment")

                if len(env) > 0 {

                        fmt.Println("Environment set to", env)

                }

        }),

)

定义API

我们使用protobuf文件来定义服务的API接口。使用protobuf可以非常方便去严格定义API,提供服务端与客户端双边具体一致的类型。

syntax = "proto3";

service Greeter { //微服务结构

rpc Hello(HelloRequest) returns (HelloResponse) {} //注册方法

}

message HelloRequest {//消息结构 字符串 变量 标识符

string name = 1;

}

message HelloResponse {

string greeting = 2;

}

生成API接口

使用工具来生成protobuf代码文件,它们负责生成定义的go代码实现。

protoc --proto_path=$GOPATH/src:. --micro_out=. --go_out=. greeter.proto

例如:protoc --proto_path=F:\gocode\src\bottos\Go\service\proto --micro_out=F:\gocode\src\bottos\Go\service\proto --go_out=F:\gocode\src\bottos\Go\service\proto F:\gocode\src\bottos\Go\service\proto\greeter.proto

Protoc 是编译器的名字、--proto_path指定对导入文件的搜索路径,若不指定,则为当前路径;--micro_out指定生成micro风go RPC文件的路径, --go_out为生成go文件rpc路径,最后为API文件。生成的类现在可以引入handler中,在服务或客户端来创建请求了。

实现handler处理器

服务端需要注册handlers,这样才能提供服务并接收请求。处理器相当于是一个拥有公共方法的公共类,它需要符合签名func(ctx context.Context, req interface{}, rsp interface{}) error。通过上面生成文件的内容,我们看到,Greeter interface的签名的看上去就是这样:

type GreeterHandler interface {

        Hello(context.Context, *HelloRequest, *HelloResponse) error

}

Greeter处理器实现:

import proto "github.com/micro/examples/service/proto"

type Greeter struct{}

func (g *Greeter) Hello(ctx context.Context, req *proto.HelloRequest, rsp *proto.HelloResponse) error {

rsp.Greeting = "Hello " + req.Name

return nil

}

注意;观察micro文件,所有的客户端与服务端都是通过micro接口调用。文件前面为客户端接口,后面为客户端方法,后边为服务端接口,服务端接口需要在服务端实现,客户端直接通过新建客户端然后调用即可,简单方便。

注册服务和对应处理器

处理器会与服务一起被注册,就像http处理器一样。

service := micro.NewService(

micro.Name("greeter"),

)

proto.RegisterGreeterHandler(service.Server(), new(Greeter))

运行服务

服务可以调用server.Run运行起来。这一步会让服务绑到配置中的地址(默认遵循RFC1918,分配随机的端口)接收请求。另外,这一步会在服务启动时向注册中心注册,并在服务接收到关闭信号时卸载。

ierr := service.Run()

编写客户端

客户端包用于查询服务,当创建服务时,也包含了一个客户端,这个客户端匹配服务所使用的初始化包。创建greate客户端,这需要传入服务名与服务的客户端方法构建的客户端对象。

greeter := proto.NewGreeterClient("greeter", service.Client())

Greeter handler上请求调用Hello方法

rsp, err := greeter.Hello(context.TODO(), &proto.HelloRequest{

Name: "John",

})

运行

 go run .\main.go  --registry=consul,显示微服务micro --registry=consul list services,--是指使用consul进行服务发现和注册。

源文件:阅读原文,用法文档:https://micro.mu/docs/cn/toolkit.html

希望大家关注我的微信公众号,日更一篇区块链技术博客不易,有疑问可以后台留言。

go-micro讲解--Go Micro编写微服务 一、什么是go-micro Go Micro是一个插件化的基础框架,基于此可以构建微服务。Micro的设计哲学是『可插拔』的插件化架构。在架构之外,它默认实现了consul作为服务发现,通过http进行通信,通过protobuf和json进行编解码。我们一步步深入下去。Go Micro是:一个用Golang编写的包一系列插件化的接口定义基于RPcGo Micro为下面的模块定义了接口:服务发现编解... 阅读详情

相关推荐

使用STM输出互补SPWM波(三相各差120°)

使用STM32输出SPWM波形(三相各差120°)

hello011102的博客 7373

go-micro 入门教程1.搭建 go-micro环境

微服务的本质是让专业的人做专业的事情,做出更好的东西。 golang具备高并发,静态编译等特性,在性能、安全等方面具备非常大的优势。go-micro是基于golang的微服务编程框架,go-micro操作简单、编码高效、功能强大。但是网络上资料偏少,本系列文章定位最简单最容易上手的go-micro入门教程,所有案列来自实操,而非网络上的复制粘贴。 本章节的目的是让大...

imwinlion && 我是胡文林 3609

TCN(Temporal Convolutional Networks)时序卷积网络详解及代码

TCN(Temporal Convolutional Networks)时序卷积网络详解及代码

zhulewen的博客 7883

使用micro创建微服务(二) -- micro.Option详解

在micro框架中,我们在使用NewService(opts …Option) Service方法创建服务实例时,我们可以通过传入Option参数来控制服务的不同的行为,下面我们就来了解下在2.6.0版本中所有的Option及其作用: micro.Name(n string) Option:指定服务的名称。服务名称通常按照命名空间.类型.名字的方式来进行命名。命名空间对应的是服务所在的项目;类型代表服务的类型,如:gRPC、web等。gRPC类型的服务通常缩写为srv。在服务启动成功后,服务名称会自动注册

yangxc的博客 625

深度解析中国支付清算体系

说起国之重器,不仅仅有 东风快递、渔16、渔17、渔18,还有另外一个国之重器-CNAPS2(中国支付清算体系)。 中国国内支付行业的发达水平、繁荣程度,不客气的讲,在全世界都是数一数二的,世界上最大的银行卡组织银联在中国,世界上交易量最大的网络零售支付清算体网联在中国。可以说现在我国经济的高速发展,离不开CNAPS2。

银行信息系统应用架构详解 2508

SCHUNK SVH五指灵巧手 | 熵洛智能

雄克仿真五指机械手产品系列可以如人手操作那般完美地完成抓取操作。电子装置完全集成于腕关节中,使五指机械手几乎可以完成所有的人体手部动作。凭借带有9个驱动器的运动指骨,机械手可高精度地 执行多种抓取操作。富有弹性的抓取表面确保了对物体的可靠抓取。除了开启抓取和操作任务的全新领域之外,雄克还为在五指机械手的手势基础上进行人与机器人的交流开创了无限可能。编辑切换为居中添加图片注释,不超过 140 字(可选)产品特点:机械手有左手或右手两种版本适合移动应用耗能低,使用 24 V DC 在腕关节处完整集成了控制、调节

ShannonTech的博客 1331

golang微服务框架go-micro使用 (二) Ultimate Guide For Bootstrap

main.go 说明 package main import ( "github.com/micro/go-micro/v2" log "github.com/micro/go-micro/v2/logger" "micro-hello/handler" hello "micro-hello/proto/hello" "micro-hello/subscriber" ) func main() { // New Service service := micro.NewService(

luslin1711的博客 1196

告别ZotFile!Zotero 7+百度网盘文献同步全攻略(含软链接避坑指南)

本文针对Zotero 7用户,提供了告别ZotFile插件后,利用百度网盘实现文献附件同步的完整解决方案。详细讲解了如何通过设置Zotero链接目录与创建软链接,将附件库迁移至云盘,并附有详细的避坑指南,确保数据安全与多设备同步的稳定性。

mmm90的博客 586

go-micro 框架的安装

关于go-micro框架的安装

weixin_39836254的博客 876

2ED2410-EM:12v / 24v智能模拟高侧MOSFET栅极驱动器

12v / 24v智能模拟高侧MOSFET栅极驱动器。2ED2410-EM具有输入CPP和CPN的电压比较器。该比较器可用于基于任何模拟电压触发SAFESTATE模式,甚至是外部电压2ED2410-EM。CPP为比较器的正输入,CPN为负输入。VcPREF可以通过微控制器进行调节,也可以通过板载电源芯片(如英飞凌SBC)或简单的分压器在限制VcP(REF)内进行固定,以保持稳定性。使用此比较器允许2ED2410-EM进入SAFESTATE并独立于微控制器关闭MOSFET。

让学习成为一种习惯 2188

智能能效管家:基于 ESP32 的智能插座设计与精细化功耗管理实现

针对传统插座无法远程控制、功耗监测缺失、能源浪费严重等问题,本文设计一款基于 ESP32 主控芯片的智能插座。该系统集成 WiFi 无线通信、交流功耗采集、继电器通断控制模块,实现四大核心功能。硬件采用模块化选型与安全接线设计,软件基于 Arduino-ESP32 框架开发,搭载 Mqtt 通信协议与功耗算法,可通过手机 / 云端实时管控设备,有效提升用电安全性与能源利用率。:ESP32;智能插座;功耗管理;远程控制;能耗监测。

weixin_42300449的博客 101

项目挂到iis 点击导入 未将对象引用设置到对象的实例_Micro In Action(二):项目结构与启动过程...

点击上方蓝色“Go语言中文网”关注我们,领全套Go资料,每天学习Go语言本文作者:Che Dan,授权发布原文链接:https://medium.com/@dche423/micro-in-action-part2-cn-9bbc33d356eb本文是Micro[1]系列文章的第二篇。我们将以实际开发微服务为主线,顺带解析相关功能。从最基本的话题开始,逐步转到高级特性。项目结构 在上...

weixin_39598584的博客 324

【网络与爬虫 53】Scrapy-Prometheus实战指南:打造企业级爬虫监控体系的终极解决方案

本文深入探讨Scrapy-Prometheus集成技术,通过费曼学习法从监控痛点出发,详细讲解如何在Scrapy爬虫中集成Prometheus指标收集系统。涵盖从基础配置到企业级监控体系的完整实战指南,帮助开发者构建可观测性强、可维护性高的分布式爬虫监控平台,实现爬虫性能的精准监控和智能告警。

熵数实验室 1584

micro限流实现及原理

限流原理 代码实现 服务端 /* 限流相关的包: jujuratelimit "github.com/juju/ratelimit" ratelimit "github.com/micro/go-plugins/wrapper/ratelimiter/ratelimit" */ func startRPCService() { reg := etcdv3.NewRegistry(func(options *registry.Options) { options.Addrs = []st

weixin_45566022的博客 488

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

06-GoMicro安装

最简单的Service搭建为了让客户端能找到,Service需要一个服务发现的模块。Micro默认使用Consul,你也可以使用etcd,kubernetes…。这里使用Consul。安装Consulhttps://www.consul.io/intro/getting-started/install.html 下载自己的平台下编译好的二进制文件,然后放到PATH能检索到的位置。可以使用命令行测试c

笨笨D幸福 - 后花园 1817

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

go 学习 micro

main.go package main import ( "log" "time" "github.com/micro/go-micro" _ "github.com/micro/go-plugins/registry/kubernetes" // k8s "github.com/micro/kubernetes/go/micro" "filestore-server/common" "filestore-server/service/account/handler" prot

点滴生活 238

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

go-micro安装及问题解决

Tips:micro安装需要go版本至少高于1.11 目录 Tips:micro安装需要go版本至少高于1.11 consul 安装 protoc 安装 micro 安装 protoc-gen-micro安装 protoc-gen-go安装 grpc安装 consul 安装 下载地址:Consul Versions | HashiCorp Releaseshttps://releases.hashicorp.com/consul/ Tips:注意使用稳定版,因为有些新特性开发环境上..

qq_44662924的博客 1670

go-micro v1版本

1. protoc 编译器下载 protoc编译器负责将xxx.proto文件编译生成xxx.pb.go文件,其位github.com/protocolbuffers/protobuf库下。 到下面地址下载相应系统版本的protoc编译器。下载后解压文件,到其bin\proto文件路径到系统环境变量。 https://github.com/protocolbuffers/protobuf/releases 2. protoc-gen-go protoc-gen-go提供了protoc编译器生成go相关ap

ZT 927

安装micro/go-micro

创建文件夹,拉取相关包 mkdir golang.org cd golang.org mkdir x cd x git clone https://github.com/golang/net.git git clone https://github.com/golang/crypto.git git clone https://github.com/golang/sys.git g...

u012158162的专栏 3691

学生和教育人士可免费申请 Github 私有仓库

Github 是全球知名的软件项目托管网站。在 Github 创建私有仓库是需要收费的,收费方案有多种,费用最小的方案是每月 7 美元的“微型”套餐,可创建 5 个私有仓库,协作者的数量无限制 今天在 HN 上到一则消息,“Free private Github repos for students and edu people | 学生和教育人士可免费申请 Github 私有仓库”。 如果

YYYYBlueSky的专栏 1万+

go micro安装:go get github.com/micro/micro问题

问题 : package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc" (https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: i/o timeout) 现在的代码不在goog...

weixin_34130269的博客 3100

go微服务学习 go-micro框架-—— micro安装

由于 Micro3.0直接放弃维护 go-micro,所以网上很多文章都是已经过时的了。那些安装方法根本装不上了。此贴主要根据官方文档进行摸索,感觉官方文档似乎也没来得及更新,所以部分操作也没能成功。就只记录一下自己成功的操作和遇到的问题。 依赖 我们需要protoc-gen-micro来生成代码 protobuf protoc-gen-go protoc-gen-micro #Download latest proto releaes #https://github.com/protocolbuffer

weixin_44336181的博客 1438

micro的介绍、安装与使用

1.Micro的介绍 Micro解决了构建云本地系统的关键需求。它采用了微服务体系结构模式,并将其转换为一组工具,作为可伸缩平台的构建块。Micro隐藏了分布式系统的复杂性,并为开发人员提供了很好的理解概念。Micro是一个专注于简化分布式系统开发的微服务生态系统。是一个工具集合, 通过将微服务架构抽象成一组工具。隐藏了分布式系统的复杂性,为开发人员提供了更简洁的概念。 Micro...

junaozun的博客 5058

构建微服务的十大 Go 框架/库

现在,很多开源库都支持构建应用程序。我应该向你推荐一些库,它们可以帮助启动具有简单设计、干净代码和良好性能的项目。 01 CLI 命令(spf13/cobra) 你想要构建一些 CLI 命令吗? Cobra 既是一个用于创建强大的现代 CLI 应用程序的库,也是一个用于生成应用程序和命令文件的程序。 我使用这个库来管理命令应用程序,执行运行程序,初始化配置,并启动 Rest API。 基于 cobra 的应用组织结构: ├──app │├──main.go │├...

wangxi06的专栏 2536

go get github.com/xxx/xxx 下载失败

原因: go get访问github很慢,可以通过增加代理来加快访问速度 处理步骤: go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct go get github.com/xxx/xxx 可能出现的错误: GoLand报错:warning: go env -w GOPROXY=… does not override conflicting OS environm 查看golang环境变量,会发现本地cmd和GoLan

qirui_lii的博客 1523
上一篇: Go语言学习笔记(十八)------go使用问题合集
下一篇: 商业公链之区块链技术架构设计(一)------区块链对比
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值