Go语言中文网 为您找到相关结果 669

简单易懂的golang[go-micro]微服务

微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。 一般的微服务工作流程都可以用写明这种图来表达。 image.png 先把自己的服务注册到注册中心 客户端调用的时候去注册中心查询调用的服务的服务器列表 得到服务列表,随机调取一台进行远程协程 我们这里的注册中心使用的是ETCD 1.为什么不选择Redis? ps:首先注册中心的存放必须保证稳定,不可缺失。要不注册中心挂了,你要一个个服务的去重启?然后把它们从新注册到注册中心?这工作量你想想都不愿意更别说运维了。 2.为什么不选择ZooKeeper ? ps: ZooKeeper 因为Zookeeper...阅读全文

博文 2020-04-02 21:33:17 傻梦兽

Go语言之GRPC

1.RPC的基本知识介绍: RPC叫做远程调用框架(Remote Procedure Call),远程调用原理如下所示: 比如 A (client) 调用 B (server) 提供的remoteAdd方法: 首先,A与B之间建立一个TCP连接; 然后,A把需要调用的方法名(这里是remoteAdd)以及方法参数(10, 20)序列化成字节流发送出去; 接着,B接受A发送过来的字节流,然后反序列化得到目标方法名,方法参数,接着执行相应的方法调用(可能是localAdd)并把结果30返回; 最后,A接受远程调用结果,输出30。 RPC框架就是把我刚才说的这几点些细节给封装起来,给用户暴露简单友好的API使用。 RPC与Socket的区别: RPC(远程过程调用)采用客户机/服务器模式实现两个进...阅读全文

博文 2020-05-14 09:13:05 ZhDavis

GO GRPC 学习笔记01

简介: gRPC是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。 环境: WIN环境下: GO 版本1.15 其他包的信息为: github.com/golang/protobuf v1.4.2 golang.org/x/net v0.0.0-20200904194848-62affa334b73 // indirect golang.org/x/sys v0.0.0-20200915050820-6d893a6b696e // indirect golang.org/x/text v0.3.3 // indirect google.golang.org/genproto v0.0.0-20200914193844-75d14daec038 // indirect ...阅读全文

博文 2020-09-15 16:32:46 小钟钟同学

GRPC

首先,GRPC是基于HTTP2来实现的网络传输协议 使用示例 编写IDL(接口描述语言),通过IDL来定义我们的服务,保存为hello.proto syntax = " proto3 " ; package hello ; message HelloRequest{ string name=1; } message HelloResponse{ string reply=1; } service HelloService{ rpc SayHello(HelloRequest) returns(HelloResponse){} } 代码生成工具安装 安装protoc工具,下载地址:https://github.com/protocolbuffers/protobuf/releases 安装go...阅读全文

博文 2020-08-19 10:32:43 强某某

golang rpc usage

# golang rpc usage ## 引言 这个文章不对RPC的底层实现做深入剖析,也不讲解RPC是什么~~ ## sample RPC三步走,方法模型、服务端搭建、客户端设计 ### model 我们以设计一个做加法运算的方法为例子 ``` type Math int //Math类 type Args struct { Ops1 int Ops2 int } func (m *Math) Add(args Args, reply *int) error { log.Print("server call Add") *reply = args.Ops1 + args.Ops1 return nil } ``` ### server ``` func main() { //创建对象 m...阅读全文

博文 2020-04-22 18:21:32 antonlin

grpc-go google.golang.org/protobuf/compiler/protogen

1、grpc-go源码,下载后,发现不能导入google.golang.org/protobuf/compiler/protogen image 2、解决措施? 2.1、查找protobuf image image image image image 2.2 、下载protobuf-go源码 image 2.3、将源码解压,并移动到gopath/src下, image 从上面的图片中,可以看出来,grpc-go代码中,已经成功的导入...阅读全文

博文 2020-07-05 14:33:11 翻江倒海一条鱼

初识grpc(一)——mac下的初体验

前言最近在做这样一个需求,一个PC客户端应用拥有一个system权限下的服务,这样的一个服务在执行高权限方面确实很有优势,解决了很多的权限难题,但任何事情都有两面性,在拥有高权限的同时也丧失了一些需要用户权限执行的功能,比如要获取显示器信息的时候,因为system的session下面是没有用户界面的,所以就无法准确获取到,想要安装证书到当前用户下面的时候也是无能无力,等等随着这样的场景越来越多,对于一个用户权限下的进程需求就愈发的明显。又由于历史性的问题,核心的通信框架在这个agent中,所有的和远程server的交互都是agent执行的,所以我们需要的是一个用户权限下的进程,需要和agent进行通信,来执行agent的指令,关于这个通信的实现综合考虑了很多解决方案,后来在朋友的推荐下了解了...阅读全文

博文 2020-04-14 11:34:28 Buffer_Lee

golang-grpc示例

文链接 1. 环境配置 go环境配置(略) 1.1 protoc-gen-go cd $GOPATH/src/github.com/golang/ git clone https://github.com/golang/protobuf.git cd protobuf/protoc-gen-go go build #生成protoc-gen-go go install . #or cp protoc-gen-go $GOHOME/bin/ 1.2 protoc-gen-go-grpc cd $GOPATH/src/github.com/grpc git clone https://github.com/grpc/grpc-go.git cd grpc-go/cmd/protoc-gen-go...阅读全文

博文 2020-09-28 10:33:51 Lynn_Yuan

grpc学习记录

pb安装 安装protoc mac brew install protobuf 安装protoc-gen-go $ go get -v -u github.com/golang/protobuf/proto $ go get -v -u github.com/golang/protobuf/protoc-gen-go $ cd $GOPATH/src/github.com/golang/protobuf/protoc-gen-go/ $ go build $ go install #生成protoc-gen-go 放在 $GOPATH/bin/ 这个要放在PATH环境变量当中 protoc 生成go和gRpc .go文件的区别 protoc --go_out=./go1/ ./proto/m...阅读全文

博文 2020-06-27 01:32:40 佛手瓜

Grpc介绍 — ProToBuf基本使用

RPC(Remote Procedure Call)远程过程调用,关注笔者的同学应该知道之前笔者出过关于Thrift对应的问题,这次主要来说的是Google开源的Grpc,和Thrift有很大的区别Grpc是基于HTTP2.0并且依赖protobuf,为什么又推出关于grpc的文章呢?请大家继续往下看。 附上: 喵了个咪的博客:w-blog.cn 博文实例demo:GitHub - sunmi-OS/grpc-php-to-golang-demo grpc官网:grpc / grpc.io protobuf代码仓库:Releases · protocolbuffers/protobuf · GitHub 一,为什么要用grpc它的优势是什么 一个高性能、通用的开源RPC框架,其由Google...阅读全文

博文 2020-02-27 12:32:46 文振熙

grpc安装以及在go中的简单应用

1.golang语言的安装为了简化安装过程,使用yum方式进行快速安装1.1通过命令查看当前yum中golang的版本信息: yum info golang yum中golang信息查看 1.2 使用yum命令安装golang: yum install golang 1.3 验证安装成功的信息go env 1.4 在环境变量中增加golang的GOROOT和GOPATH路径,将GOPATH设置成项目的实际路径vi /etc/profile在文件末尾添加如下 # GOROOT export GOROOT=/usr/lib/golang # GOPATH export GOPATH=/root/work/programmer/go/gopath/ # GOPATH bin export PATH...阅读全文

博文 2020-07-03 10:32:57 卢纪超

go-gRPC 初体验

微服务想必大家都不陌生了。刚接触到golang,那么在golang中怎么使用微服务呢。这里使用gRRC框架写了一个简单的例子。 环境要求 go>=1.13; set GO111MODULE=on 安装 protoc 安装 Protoc plugin-go 示例代码 iris-grpc-example 项目结构 iris-grpc-example │ .gitignore │ go.mod │ go.sum │ README.md │ ├─proto │ README.md │ servers.pb.go │ servers.proto │ └─servers main.go services.go 通过目录可以看到这里使用了go mod,当前golang版本 1.13。 proto 使用Pr...阅读全文

博文 2020-02-10 23:32:49 旧梦发癫

Golang技巧之默认值设置的高阶玩法

最近使用 GRPC 发现一个设计特别好的地方,非常值得借鉴。 我们在日常写方法的时候,希望给某个字段设置一个默认值,不需要定制化的场景就不传这个参数,但是 Golang 却没有提供像 PHP、Python 这种动态语言设置方法参数默认值的能力。 低阶玩家应对默认值问题 以一个购物车举例。比如我有下面这样一个购物车的结构体,其中 CartExts 是扩展属性,它有自己的默认值,使用者希望如果不改变默认值时就不传该参数。但是由于 Golang 无法在参数中设置默认值,只有以下几个选择: 提供一个初始化函数,所有的 ext 字段都做为参数,如果不需要的时候传该类型的零值,这把复杂度暴露给调用者; 将 ext 这个结构体做为一个参数在初始化函数中,与 1 一样,复杂度在于调用者; 提供多个初始化函数...阅读全文

博文 2020-06-24 11:32:43 大愚Talk

grpc同时提供grpc和http接口—h2c和grpc-gateway等的使用

本文来自于网上众多大神的博客的集合,加入了自己的理解,主要目的是把grpc和http的关系做一个全面的梳理总结。 0. 写在前面的一些说明   本文默认你已经学习其他博客,知道怎么写一个简单的grpc demo,所以编译proto文件之类的都略过不提。如果你还没有,可以先看这个。 本文使用的proto文件: syntax = "proto3"; package service; option go_package = ".;service"; import "google/api/annotations.proto"; message OrderResponse { int32 orderId = 1; } message OrderReuqest { int32 orderId = 1; ...阅读全文

博文 2020-07-10 11:33:02 猫仙草

linux下安装grpc插件 (c++和go语言)

在debian/ubuntu系统下,需要做如下准备操作:$ [sudo] apt-getinstallbuild-essential autoconf libtoolpkg-config如果你想要从源码编译并且运行测试,同时运行下面的安装:$ [sudo] apt-getinstalllibgflags-dev libgtest-dev$ [sudo] apt-getinstallclang libc++-dev下拉源代码信息(包括子模块)在编译之前,你需要下拉grpc的github仓库,并且下载grpc的一些依赖库,具体操作如下:$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc$ c...阅读全文

博文 2020-09-29 21:32:42 八英里1022

grpc server源码学习

grpc server源码学习如何实现一个最简单的grpc server// 创建listener lis, err := net.Listen("tcp", port) if err != nil { log.Fatalf("failed to listen: %v", err) } // 创建server示例 s := grpc.NewServer() // 注册服务 pb.RegisterGreeterServer(s, &server{}) reflection.Register(s) // 启动服务端监听 if err := s.Serve(lis); err != nil { log.Fatalf("failed to serve: %v", err) }grpc.NewServ...阅读全文

博文 2020-09-20 17:32:38 byte

Go gRPC进阶-TLS认证+自定义方法认证(七)

前言 前面篇章的gRPC都是明文传输的,容易被篡改数据。本章将介绍如何为gRPC添加安全机制,包括TLS证书认证和Token认证。 TLS证书认证 什么是TLS TLS(Transport Layer Security,安全传输层),TLS是建立在传输层TCP协议之上的协议,服务于应用层,它的前身是SSL(Secure Socket Layer,安全套接字层),它实现了将应用层的报文进行加密后再交由TCP进行传输的功能。 TLS的作用 TLS协议主要解决如下三个网络安全问题。 保密(message privacy),保密通过加密encryption实现,所有信息都加密传输,第三方无法嗅探; 完整性(message integrity),通过MAC校验机制,一旦被篡改,通信双方会立刻发现; 认...阅读全文

博文 2020-04-26 10:26:09 FireworksEasyCool

mac下使用protoc生成golang代码报错

首先搭建grpc环境 brew install protobuf:安装protoc命令 go get -u github.com/golang/protobuf/proto go get -u github.com/golang/protobuf/protoc-gen-go 执行命令生成golang代码 protoc --go_out=plugins=grpc:. *.proto 执行命令是发生错误 protoc-gen-go: program not found or is not executable Please specify a program using absolute path or make sure the program is available in your PAT...阅读全文

博文 2020-10-10 00:32:40 单身程序元

golang之channel使用简述

Channel golang CSP 模型中的C, 主要用于goroutine之间消息的传递,我们知道在写代码的过程中,解偶是非常重要的一环,而使用channel则可以很好的隔离goroutine,使得goroutne之间的交互,只需要将重心关注在如何从channel中消费或者生产消息。 声明和使用 阻塞场景 关闭Channel select & range 使用channel模拟生产消费模型 声明和使用 使用make声明一个channel ch := make(chan int) ch <- 1 // write ch位于 <- 的左侧(代表数据流入 <- ch // read ch位于 <- 的右侧(代表数据流出 阻塞场景 在真正使用channel前,我们需要了解channel可能会产生...阅读全文

博文 2020-06-01 14:32:45 pojol