商业公链之区块链技术使用的常见库(十)------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为下面的模块定义了接口:服务发现编解... 阅读详情

相关推荐

【数据集】waymo motion dataset介绍与数据解析可视化

waymo motion数据集下载,数据描述,数据特征和地图特征,数据解析并完成数据可视化

shuaixio的博客 5179

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

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

imwinlion && 我是胡文林 3609

音视频入门:H264、H265概念总结

添加链接描述 什么是H.264与H.265 H.264与H.265都是视频压缩格式,由于视频本身的码流太大,所以需要经过压缩然后再通过网络进行传输。H.264是目前比较主流的压缩算法,像视频会议设备一般都采用这个编码格式。基础的H.264可以支持在1M带宽下传输720P30帧/秒的图像;H.264 HIGH PROFILE支持在512K带宽下传输720P30帧/秒的图像。 H.265是比较新的压缩算法,可以更一步提高压缩比,随着我们现在生活中出现的视频格式越来越大(比如现在基本都是1080P甚至4K的显示器

weixin_40673765的博客 8936

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

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

yangxc的博客 625

Amesim(五):单个悬架系统搭建

一、组成 单个悬架系统组成包括:端子,质量块*2,弹簧,阻尼器,速度路面反馈,路面激励。 二、搭建 打开Amesim,在 library 选择 1D Mechanical 选择质量模块,添加到skech中,并按 ctrl+r 旋转质量块,将箭头朝上,设置规定的力传递正方向 添加弹簧阻尼器,与质量块连接 添加VX模块,将路面的激励传递转化为速度和位移,传递给悬架系统 在...

林小川的博客 7166

激光雷达-IMU标定工具lidar_imu_calib保姆级教程(VLP-16实测)

本文提供激光雷达与IMU联合标定的详细实战教程,重点解析lidar_imu_calib工具在VLP-16上的应用。从环境部署、数据采集技巧到参数配置与结果验证,手把手指导完成标定全流程,并详解如何在LIO-SAM等SLAM系统中应用标定结果,确保传感器融合精度。

food6的博客 475

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

用AI生成React/Vue页面?实测Locofy等5款工具,教你选最适合的

本文深度评测了2024年五大AI生成前端页面工具,包括Locofy、Builder.io等,从代码质量、可视化编辑器成本到企业级落地方案进行全面分析。通过实测数据和实战案例,揭示如何利用AI生成技术高效创建React/Vue页面,提升开发效率并优化性能。

m5n6o7的博客 606

go-micro 框架的安装

关于go-micro框架的安装

weixin_39836254的博客 876

Skill的嵌套

Skill的嵌套就很简单,直接引用其他的Skill就好了。在一个 Skill 的 SKILL.md 中,可以明确指示 Claude 去读取另一个 Skill 的文档。

Criss@陈磊 953

YOLOv11损失函数进阶:融合SmoothL1与FocalLoss,让检测精度再涨10%的实战教程

在YOLOv11的这里的beta参数控制“L1与L2的过渡阈值”,默认设为1.0即可兼容多数场景。同样在# 计算动态alpha(基于类别样本数,需提前统计self.class_counts)# 交叉熵基础# FocalLoss权重else:使用前需统计数据集的(每个类别的样本数),并传入的alpha参数。损失函数是YOLOv11精度的“灵魂”——SmoothL1让边界框回归“稳、准、狠”,改进FocalLoss让类别分类“雨露均沾”。从代码改造到实战落地,本教程已为你搭建了一条精度跃升的路径。

m0_64661770的博客 212

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

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

weixin_39598584的博客 324

VSCode PlantUML 插件超详细教程:从安装配置到实战绘图全流程

VSCode PlantUML 插件超详细教程:从安装配置到实战绘图全流程

weixin_69237381的博客 908

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

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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 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

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

【GoCN酷Go推荐】protobuf生成Go代码插件gogo/protobuf

从 JSON 开始谈到序列化,大家最先想到的可能是 JSON 或者 XML,这两种序列化协议都是基于文本的编码方式进行数据传输。类似的还有 YAML 等。JSON 拥有许多优点,使之成为最...

Go中国 1852

安装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微服务学习 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

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

micro的介绍、安装与使用

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

junaozun的博客 5058

微服务 micro服务不能注册到consul中的解决以及在安装micro时出现找不到pkg的问题

最近正在学习微服务,看的是学院君的知识星球,首先说明微服务的blog不是粘贴复制学院君的源代码,是自己在学习的时候遇到的问题再次记录一下。 这几天学习微服务时遇到了一下的问题: 在安装micro框架时使用 go get github.com/micro/go-micro 会出现找不到安装的问题 这是因为该框架有一些包是放在了github上,所以导致获取不到 可以根据报出的错误 进行git c...

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值