安装protobuf

go get -u github.com/golang/protobuf/proto

go get -u github.com/golang/protobuf/protoc-gen-go

此时会生成protoc-gen-go,protoc一般是获取已经编译好的可执行文件(https://github.com/google/protobuf/releases)

linux需要将protoc-gen-go放到/usr/bin/,windows因为$GOPATH/bin已经加到PATH中了所以可以直接找到

  安装gRPC

go get -u google.golang.org/grpc

不过由于国内的网络原因上面的命令可能不会成功

执行下面的多条命令来代替

git clone https://github.com/golang/net.git $GOPATH/src/golang.org/x/net

git clone https://github.com/golang/text.git $GOPATH/src/golang.org/x/text

git clone https://github.com/google/go-genproto.git $GOPATH/src/google.golang.org/genproto

git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc

如果 $GOPATH中有多个路径,请手动替换成其中一个。

  测试案例

HelloService.proto和之前C++编译教程的一样

生成命令如下:

protoc HelloService.proto  -I . --go_out=. 这个是仅仅生成protobuf的产物

protoc HelloService.proto  -I . --go_out=plugins=grpc:.

生成的HelloService.pb.go 需要改成package main

server.go

 package main

 import (
"context"
"fmt"
"net" "google.golang.org/grpc"
) type HelloServiceServerImpl struct {
} func (s *HelloServiceServerImpl) SayHello(c context.Context, req *Request) (*Response, error) {
fmt.Printf("%s\n", string(req.Data)) resp := Response{}
resp.Data = []byte("hello from server") return &resp, nil
} func main() {
lis, err := net.Listen("tcp", "127.0.0.1:57501")
if err != nil {
fmt.Println(err)
return
}
s := grpc.NewServer()
RegisterHelloServiceServer(s, &HelloServiceServerImpl{})
fmt.Printf("Server listening on 127.0.0.1:57501\n")
s.Serve(lis)
}

client.go

 package main

 import (
"context"
"fmt" "google.golang.org/grpc"
) func main() {
conn, err := grpc.Dial("127.0.0.1:57501", grpc.WithInsecure())
if err != nil {
fmt.Println(err)
}
client := NewHelloServiceClient(conn)
r, err := client.SayHello(context.Background(), &Request{Data: []byte("send from client")})
fmt.Printf("%s\n", string(r.Data))
}

使用go build -o client HelloService.pb.go client.go编译

C++版本的服务器

Go客户端

gRPC go安装教程的更多相关文章

  1. Linux+apache+mono+asp.net安装教程

    Linux+apache+mono+asp.net安装教程(CentOS上测试的) 一.准备工作: 1.安装linux系统(CentOS,这个就不多讲了) 2.下载所需软件 http-2.4.4.ta ...

  2. Greenplum 源码安装教程 —— 以 CentOS 平台为例

    Greenplum 源码安装教程 作者:Arthur_Qin 禾众 Greenplum 主体以及orca ( 新一代优化器 ) 的代码以可以从 Github 上下载.如果不打算查看代码,想下载编译好的 ...

  3. git 安装教程

    昆,简单说下安装教程1,安装Git2,安装TortoiseGit3,打开第一步安装的git工具GIT BASH

  4. Docker和Docker-compose安装教程以及docker-elk,docker-storm安装教程

    此安装教程仅供我自己安装配置时查看,其他的人不可以偷看!!! 安装Docker 1. Update package information, ensure that APT works with th ...

  5. RHEL 6.3 详细安装教程

    以前刚接触linux时,什么都不懂,为了学习,在电脑上安装双系统(原系统为Win7),吃过不少苦头,在网上搜教程,很多都是语焉不详,导致安装过程中战战兢兢.最近朋友面试运维,面试官有考他对linux安 ...

  6. Android Studio的下载和安装教程(从ADT到AS)

    之前一直使用的是Android development tools(简称ADT),后来说是google对ADT不再提供支持,然后一直在考虑是否把自己电脑换成Android Studio(简称AS),从 ...

  7. mysql快速导出数据库ER图和数据字典(附navicat11安装教程及资源)

    ♣ mysql使用navicat11快速导出数据库ER图 ♣ mysql使用navicat11快速导出数据库数据字典 ♣ navicat11 for mysql (这里是mysql5.7.12)专业版 ...

  8. Smokeping安装教程

    Smokeping安装教程 #Smokeping2.6.8安装教程 #2016.3.6 改编v1.0 #Linux运维技术交流 347163978   环境 CentOS release 6.4 (F ...

  9. (二)ADS1.2的安装教程以及使用 调试 (不会 AXD 调试工具)

    安装教程: 参考百度 http://jingyan.baidu.com/article/cdddd41c7db85253cb00e1ae.html 具体使用看: 杨铸的那本书(嵌入式底层软件驱动开发) ...

随机推荐

  1. 【NOIP2013模拟】水叮当的舞步

    题目 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变. 为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈的舞来卖萌~~~ 地毯上的格子有N行N列, ...

  2. ftp CentOS7安装

    1.安装ftp服务yum install vsftpd 2.修改ftp配置文件(/etc/vsftpd/vsftpd.conf)ascii_upload_enable=YESascii_downloa ...

  3. null转为数字的坑

    在项目中,需要用到某个字段等于0时来处理逻辑 if (+item.ext === 0) {} // 前面的+号是转为数字 // 如果item.ext 为 null时, +item.ext 就等于 0 ...

  4. 【leetcode】1213.Intersection of Three Sorted Arrays

    题目如下: Given three integer arrays arr1, arr2 and arr3 sorted in strictly increasing order, return a s ...

  5. DevOps之持续集成SonarQube代码质量扫描

    一.SonarQube介绍       SonarQube是一个用于代码质量检测管理的开放平台,可以集成不同的检测工具,代码分析工具,以及持续集成工具.SonarQube 并不是简单地把不同的代码检查 ...

  6. BZOJ 4597: [Shoi2016]随机序列 线段树 + 思维

    Description 你的面前有N个数排成一行.分别为A1, A2, … , An.你打算在每相邻的两个 Ai和 Ai+1 间都插入一个加号或者 减号或者乘号.那么一共有 3^(n-1) 种可能的表 ...

  7. LNK1104 无法打开文件“proj.lib”

    两种可能: 1.proj.lib不存在 2.proj.lib不符合编译的debug(release)版本

  8. Python3学习笔记(八):集合

    集合(set)是一种可变的无序的不重复的数据类型 要创建集合,需要将所有项(元素)放在花括号({})内,以逗号(,)分隔. >>> s = {'p','y','t','h','o', ...

  9. Java网络编程之Netty服务端ChannelOption.SO_BACKLOG配置

    ChannelOption.SO_BACKLOG对应的是tcp/ip协议listen函数中的backlog参数,函数listen(int socketfd,int backlog)用来初始化服务端可连 ...

  10. esLint——规范你的代码(转)

    团队协作时,若是团队的代码风格统一,能够大大减少沟通成本. 什么是 ESLint ? ESLint 是在 ECMAScript/JavaScript 代码中识别和报告模式匹配的工具,它的目标是保证代码 ...