go的grpc环境安装

参考grpc-go官方文档:https://grpc.io/docs/languages/go/quickstart/

视频教程:https://www.bilibili.com/video/BV1zi4y1L7Sf

环境

golang的docker image

$ docker run -it golang:alpine

简单准备

# go env -w GO111MODULE=on
//重要:添加代理,参考:https://goproxy.cn/
# go env -w GOPROXY=https://goproxy.cn,direct
//必要的一些工具
# apk add git make gcc g++

prorobuf安装

下载protobuf-all-3.8.0.tar.gz

# wget https://github.com/protocolbuffers/protobuf/releases/download/v3.8.0/protobuf-all-3.8.0.tar.gz
Connecting to github.com (52.74.223.119:443)
Connecting to github-production-release-asset-2e65be.s3.amazonaws.com (52.217.76.180:443)
saving to 'protobuf-all-3.8.0.tar.gz'
protobuf-all-3.8.0.t 13% |************ | 968k 0:05:10 ETA

解压并安装

# tar -xvf protobuf-all-3.8.0.tar.gz
# cd protobuf-3.8.0
protobuf-3.8.0# mkdir -p /usr/local/protobuf
protobuf-3.8.0# ./configure --prefix=/usr/local/protobuf
protobuf-3.8.0# make
protobuf-3.8.0# make install protobuf-3.8.0# echo "export PATH=$PATH:/usr/local/protobuf/bin">>/etc/profile
protobuf-3.8.0# source /etc/profile
protobuf-3.8.0# protoc --version
libprotoc 3.8.0

prorobuf安装完成。

protoc-gen-go安装

protoc-gen-go是proto文件生成go文件的插件

方法1:

//网络原因,安装比较困难,添加GOPROXY后解决。
go get -u github.com/golang/protobuf/protoc-gen-go

方法2:源码安装

mkdir -p $GOPATH/src/github.com/golang && cd $GOPATH/src/github.com/golang
//大小8M,可以直接clone
golang# git clone https://github.com/golang/protobuf.git
Cloning into 'protobuf'...
remote: Enumerating objects: 7251, done.
remote: Total 7251 (delta 0), reused 0 (delta 0), pack-reused 7251
Receiving objects: 100% (7251/7251), 8.43 MiB | 17.00 KiB/s, done.
Resolving deltas: 100% (4783/4783), done.

编译方法

golang# cd protobuf/protoc-gen-go
protoc-gen-go# go build -o protoc-gen-go main.go
go: downloading google.golang.org/protobuf v1.23.0
protoc-gen-go# ls
protoc-gen-go <<< 编译出可执行文件 protoc-gen-go# echo "export PATH=$PATH:$GOPATH/bin" >> /etc/profile
protoc-gen-go# source /etc/profile
//复制protoc-gen-go到bin目录
protoc-gen-go# cp protoc-gen-go /usr/local/go/bin
protoc-gen-go# ls /usr/local/go/bin/
go gofmt protoc-gen-go

验证protoc-gen-go插件

验证protoc-gen-go插件就是看是否能将proto文件生成pb.go文件。

helloworld# ls
helloworld.proto
helloworld# protoc --go_out=plugins=grpc:. helloworld.proto
helloworld# ls google.golang.org/grpc/examples/helloworld/helloworld/
helloworld.pb.go

证明protoc-gen-go插件成功!

安装grpc-go

# mkdir -p $GOPATH/src/google.golang.org
# cd $GOPATH/src/google.golang.org
//下载源码包
google.golang.org# wget https://github.com/grpc/grpc-go/archive/master.tar.gz
Connecting to github.com (13.229.188.59:443)
Connecting to codeload.github.com (54.251.140.56:443)
saving to 'master.tar.gz'
master.tar.gz 100% |****************************************************************************************| 1138k 0:00:00 ETA
'master.tar.gz' saved
//解压源码包
google.golang.org# tar -xvf master.tar.gz
google.golang.org# mv grpc-go-master grpc
//安装grpc-go
google.golang.org# cd grpc
grpc# go install google.golang.org/grpc
go: downloading github.com/golang/protobuf v1.4.2
go: downloading google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013
go: downloading golang.org/x/net v0.0.0-20190311183353-d8887717615a
go: downloading golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a
go: downloading golang.org/x/text v0.3.0

grpc-go安装完成。

验证

找到安装grpc-go时已经下载好的示例代码。

服务端启动

$ docker ps | grep golang
a450ff530be6 golang "/bin/sh -c sh" About an hour ago Up About an hour elastic_ptolemy
$ docker exec -it a450ff530be6 sh # cd /go/src/google.golang.org/grpc/examples/helloworld
helloworld # ls
greeter_client greeter_server helloworld helloworld# go run greeter_server/main.go
2021/01/17 00:53:56 Received: world

客户端启动

$ docker ps | grep golang
a450ff530be6 golang "/bin/sh -c sh" About an hour ago Up About an hour elastic_ptolemy
$ docker exec -it a450ff530be6 sh # cd /go/src/google.golang.org/grpc/examples/helloworld
helloworld # ls
greeter_client greeter_server helloworld helloworld # go run greeter_client/main.go
2021/01/17 00:53:56 Greeting: Hello world

grpc通信成功!

go的grpc环境源码编译安装的更多相关文章

  1. centos6.5环境源码编译安装mysql5.6.34

    centos6.5环境源码编译安装mysql5.6.34 源码下载地址http://dev.mysql.com/downloads/mysql/5.6.html#downloads 选择Generic ...

  2. LAMP环境源码编译安装过程

    LAMP环境源码编译安装过程 一.Apache的安装 1.1.apache软件包及依赖包准备 httpd-2.4.29.tar.bz2       apr-1.6.3.tar.gz      apr- ...

  3. Linux环境源码编译安装SVN

    zhoulf 2015/2/28 原创 安装说明 安装环境:Red Hat Enterprise Linux 安装方式:源码安装 软件:apr-1.5.0.tar.gz.apr-iconv-1.2.1 ...

  4. Linux环境PostgreSQL源码编译安装

    Linux环境PostgreSQL源码编译安装 Linux版本: Red Hat 6.4 PostgreSQL版本: postgresql-9.3.2.tar.gz 数据存放目录: /var/post ...

  5. 源码编译安装lnmp环境

    一.源码编译安装步骤 首先说明源码安装的好处   速度快,可自定义路径 主要有三步:1.配置 进入源码安装包  ./configure --prefix=/uer/local/nginx  可指定参数 ...

  6. 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

    写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...

  7. CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境

    CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境 什么是LNMP? LNMP(别名LEMP)是指由Linux, Nginx, MySQL/MariaDB, PHP/ ...

  8. centos7.6环境zabbix3.2源码编译安装版升级到zabbix4.0长期支持版

    zabbix3.2源码编译安装版升级到zabbix4.0长期支持版 项目需求: .2版本不再支持,想升级成4.0的长期支持版 环境介绍: zabbix服务端是编译安装的,数据库和web在一台机器上 整 ...

  9. Centos7源码编译安装PHP7.2(生产环境)

    安装PHP依赖包,否则在编译的过程中可能会出现各种报错 # Centos 安装epel-release源并将系统包更新到最新版本 $ yum install epel-release-y $ yum ...

  10. SSH/SSL 源码编译安装简易操作说明

    环境:CentOS 6.7 安全加固需求,由于某盟扫描系统主机有SSL系列漏洞,客户要求必须修复: 解决方案:将SSH/SSL升级到最新版本,删除SSL旧版本(实测不删除旧版本某盟扫描无法通过). 当 ...

随机推荐

  1. P1896 [SCOI2005] 互不侵犯 方法记录

    原题链接 [SCOI2005] 互不侵犯 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子 ...

  2. Python解决千年虫问题

    #避免千年虫(日期bug)问题 千年虫:部分计算机程序使用年份后两位作为记录年份,当日期跳转到00时候,默认会解析为1900,造成系统紊乱 lst=[45,89,1998,00,75,33,1968, ...

  3. Map中定义的方法:

    添加.删除.修改操作: Object put(Object key,Object value):将指定key-value添加到(或修改)当前map对象中void putAll(Map m):将m中的所 ...

  4. 应用DriverManager类创建sqlserver数据库连接实例 JSP中使用数据库

    JSP中使用数据库 1.JDBC介绍 java数据库连接(java Database Connectivity ,JDBC)是一种用于执行SQL语句的JavaAPI ,由一组使用java编程语言编写的 ...

  5. 齐博x1嵌套-循环栏目,并列出子栏目下的内容

    嵌套,循环栏目,并列出子栏目下的内容. 代码如下: <div class="channel-list"> <div class="row"&g ...

  6. golang单元测试一(简单函数测试)

    0.1.索引 https://blog.waterflow.link/articles/1663688140724 1.简介 单元测试是测试代码.组件和模块的单元函数.单元测试的目的是清除代码中的错误 ...

  7. Java并发编程 | Synchronized原理与使用

    Java提供了多种机制实现多线程之间有需要同步执行的场景需求.其中最基本的是Synchronized ,实现上使用对象监视器( Monitor ). Java中的每个对象都是与线程可以锁定或解锁的对象 ...

  8. 创建外部表步骤及解决ORA-29913:执行ODCIETTABLEOPEN调出时出错

    创建外部表步骤 建立目录对象(用sys用户创建.授权) 外部表所在路径一定要写对!!! create directory ext_data as 'D:\ORACLE'; grant read,wri ...

  9. Spring Boot:自定义 Whitelabel 错误页面

    一.概述在本文中,我们将研究如何禁用和自定义 Spring Boot 应用程序的默认错误页面,因为正确的错误处理描述了专业性和质量工作. 2.禁用白标错误页面 首先,让我们看看如何通过将server. ...

  10. 有依赖的背包问题(Acwing 10)

    1 # include<iostream> 2 # include<cstring> 3 # include<algorithm> 4 using namespac ...