[golang@centos7 src]$ tree helloworld/
helloworld/
├── gateway
│ └── helloworld.gw.go
├── helloworld.pb.go
├── helloworld.pb.gw.go
├── helloworld.proto
├── helloworld.swagger.json
└── server
└── server.go
- 准备工作完成,接下来正式开始开发;
前提条件
-
本文的所有操作都没有用到root账号,而是前文创建的golang账号;
-
请参照以下两篇文章将GO环境和gRPC环境搭建好:
极速搭建gRPC-Gateway环境
- 所谓的搭建gRPC-Gateway环境,其实是完成以下三件事:
-
在搭建环境时参考了一些网上的文章,结果遇到了各种问题一直没有成功(我当然不会认为文章有问题,必须认识到是自己能力不足的原因所致);
-
经过反复折腾后终于成功后,我把所有操作做成一个shell脚本,执行以下命令即可完成上图中的所有操作:
curl -o install-grpc-gateway.sh \
https://raw.githubusercontent.com/zq2599/blog_demos/master/files/install-grpc-gateway.sh \
&& chmod a+x ./install-grpc-gateway.sh \
&& ./install-grpc-gateway.sh
- 进入$GOPATH/bin目录,可见新增两个文件protoc-gen-grpc-gateway和protoc-gen-swagger:
[golang@centos7 ~]$ cd $GOPATH/bin
[golang@centos7 bin]$ ls -al
总用量 26708
drwxrwxr-x. 2 golang golang 98 12月 19 08:59 .
drwxrwxr-x. 5 golang golang 39 12月 19 08:21 …
-rwxr-x—. 1 golang golang 5253272 12月 19 08:20 protoc
-rwxrwxr-x. 1 golang golang 8461147 12月 19 08:21 protoc-gen-go
-rwxrwxr-x. 1 golang golang 6717463 12月 19 08:59 protoc-gen-grpc-gateway
-rwxrwxr-x. 1 golang golang 6908535 12月 19 08:59 protoc-gen-swagger
- 现在环境准备好了,开始开发;
编写proto文件
- 在$GOPATH/src目录下,新建文件夹helloworld,里面新建文件helloworld.proto,内容如下,有几处要注意的地方稍后会说:
// 协议类型
syntax = “proto3”;
// 包名
package helloworld;
import “google/api/annotations.proto”;
// 定义的服务名
service Greeter {
// 具体的远程服务方法
rpc SayHello (HelloRequest) returns (HelloReply) {
option (google.api.http) = {
post: “/helloworld”
body: “*”
};
}
}
// SayHello方法的入参,只有一个字符串字段
message HelloRequest {
string name = 1;
}
// SayHello方法的返回值,只有一个字符串字段
message HelloReply {
string message = 1;
}
- 上述proto文件有以下几处要注意的地方:
-
整个文件其实就是以 《初试GO版gRPC开发》一文中的helloworld.proto为基础,增加了两处内容;
-
增加的第一处,是用import关键词导入google/api/annotations.proto;
-
增加的第二处,是SayHello方法的声明处,增加了option配置,作用是配置SayHello方法对外暴露的RESTful接口的信息;
-
在使用protoc-gen-grpc-gateway的时候,上述两处配置会被识别到并生成对应的代码;
根据proto文件生成gRPC、gRPC-Gateway源码
-
proto文件编写完成,接下来是生成gRPC、gRPC-Gateway的源码;
-
生成gRPC源码的命令咱们前面的文章中已经用过,如下:
protoc -I. \
-I$GOPATH/src \
-I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \
–go_out=plugins=grpc:. \
helloworld.proto
-
执行完成后会在当前目录生成helloworld.pb.go文件;
-
执行生成gRPC-Gateway源码的命令:
protoc -I. \
-I$GOPATH/src \
-I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \
–grpc-gateway_out=logtostderr=true:. \
helloworld.proto
-
执行完成后会在当前目录生成helloworld.pb.gw.go文件;
-
执行生成swagger文件的命令:
protoc -I. \
-I$GOPATH/src \
-I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \
–swagger_out=logtostderr=true:. \
helloworld.proto
-
执行完成后会在当前目录生成helloworld.swagger.json文件;
-
至此,helloworld目录下一共有这些内容:
[golang@centos7 src]$ tree helloworld/
helloworld/
├── helloworld.pb.go
├── helloworld.pb.gw.go
├── helloworld.proto
└── helloworld.swagger.json
0 directories, 4 files
-
接下来开始编码,把运行整个服务所需的代码补全;
-
由于篇幅限制,本文暂不提及swagger相关的开发和验证,因此生成的helloworld.swagger.json文件本篇用不上,留待下一篇文章使用;
编写服务端代码server.go并启动
-
接下来编写服务端代码server.go,这个和《初试GO版gRPC开发》中的server.go内容一样;
-
在$GOPATH/src/helloworld目录下新建文件夹server,在此文件夹下新建server.go,内容如下,已经添加详细注释:
package main
import (
“context”
“log”
“net”
“google.golang.org/grpc”
pb “helloworld”
)
const (
port = “:50051”
)
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
总结
谈到面试,其实说白了就是刷题刷题刷题,天天作死的刷。。。。。
为了准备这个“金三银四”的春招,狂刷一个月的题,狂补超多的漏洞知识,像这次美团面试问的算法、数据库、Redis、设计模式等这些题目都是我刷到过的
并且我也将自己刷的题全部整理成了PDF或者Word文档(含详细答案解析)
66个Java面试知识点
架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)
算法刷题(PDF)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
mg-ar5H4eAV-1712637470361)]
66个Java面试知识点
架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)
[外链图片转存中…(img-mPfcyMAg-1712637470362)]
算法刷题(PDF)
[外链图片转存中…(img-talfu5yL-1712637470362)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-4XZOiTKF-1712637470362)]