涉及知识点 Go + Docker 本文目标 将我们的 go-gin-example 应用部署到一个 Docker 里,你需要先准备好如下东西: 你需要安装好 docker。 如果上外网比较吃力,需要配好镜像源。 Docker 在这里简单介绍下 Docker,建议深入学习 Docker 是一个开源的轻量级容器技术,让开发者可以打包他们的应用以及应用运行的上下文环境到一个可移植的镜像中,然后发布到任何支持 Docker 的系统上运行。 通过容器技术,在几乎没有性能开销的情况下,Docker 为应用提供了一个隔离运行环境 简化配置 代码流水线管理 提高开发效率 隔离应用 快速、持续部署 接下来我们正式开始对项目进行 docker 的所需处理和编写,每一个大标题为步骤大纲
爬虫是标配了,看数据那一刻很有趣。第一个就从最最最简单最基础的爬虫开始写起吧! 项目地址:https://github.com/go-crawler/douban-movie 目标 我们的目标站点是 豆瓣电影 Top250,估计大家都很眼熟了 本次爬取 8 个字段,用于简单的概括分析。具体的字段如下: 简单的分析一下目标源 一页共 25 条 含分页(共 10 页)且分页规则是正常的 每一项的数据字段排序都是规则且不变 开始 由于量不大,我们的爬取步骤如下 分析页面,获取所有的分页 分析页面,循环爬取所有页面的电影信息 爬取的电影信息入库 安装 $ go get -u github.
涉及知识点 Swagger 本文目标 一个好的 API's,必然离不开一个好的API文档,如果要开发纯手写 API 文档,不存在的(很难持续维护),因此我们要自动生成接口文档。 安装 swag $ go get -u github.com/swaggo/swag/cmd/swag@v1.6.5 若 $GOROOT/bin 没有加入$PATH中,你需要执行将其可执行文件移动到$GOBIN下 mv $GOPATH/bin/swag /usr/local/go/bin 验证是否安装成功 检查 $GOBIN 下是否有 swag 文件,如下: $ swag -v swag version v1.
知识点 信号量的了解。 应用热更新。 本文目标 在前面编写案例代码时,我相信你会想到,每次更新完代码,更新完配置文件后,就直接这么 ctrl+c 真的没问题吗,ctrl+c到底做了些什么事情呢? 在这一节中我们简单讲述 ctrl+c 背后的信号以及如何在Gin中优雅的重启服务,也就是对 HTTP 服务进行热更新。 ctrl + c 内核在某些情况下发送信号,比如在进程往一个已经关闭的管道写数据时会产生SIGPIPE信号 在终端执行特定的组合键可以使系统发送特定的信号给此进程,完成一系列的动作 命令 信号 含义 ctrl + c SIGINT 强制进程结束 ctrl + z SIGTSTP 任务中断,进程挂起 ctrl + \ SIGQUIT 进程结束 和 dump core ctrl + d EOF SIGHUP 终止收到该信号的进程。若程序中没有捕捉该信号,当收到该信号时,进程就会退出(常用于 重启、重新加载进程) 因此在我们执行ctrl + c关闭gin服务端时,会强制进程结束,导致正在访问的用户等出现问题
前言 Golang 中存在各种运行方式,如何正确的引用文件路径成为一个值得商议的问题 以 gin-blog 为例,当我们在项目根目录下,执行 go run main.go 时能够正常运行(go build也是正常的) [$ gin-blog]# go run main.go [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production. - using env: export GIN_MODE=release - using code: gin.
在上一节,我们完成了一个服务端同时支持Rpc和RESTful Api后,你以为自己大功告成了,结果突然发现要写Api文档和前端同事对接= = 。。。 你寻思有没有什么组件能够自动化生成Api文档来解决这个问题,就在这时你发现了Swagger,一起了解一下吧! 介绍 Swagger Swagger是全球最大的OpenAPI规范(OAS)API开发工具框架,支持从设计和文档到测试和部署的整个API生命周期的开发 Swagger是目前最受欢迎的RESTful Api文档生成工具之一,主要的原因如下 跨平台、跨语言的支持 强大的社区 生态圈 Swagger Tools(Swagger Editor、Swagger Codegen、Swagger UI …) 强大的控制台 同时grpc-gateway也支持Swagger [image] OpenAPI规范 OpenAPI规范是Linux基金会的一个项目,试图通过定义一种用来描述API格式或API定义的语言,来规范RESTful服务开发过程。OpenAPI规范帮助我们描述一个API的基本信息,比如: 有关该API的一般性描述 可用路径(/资源) 在每个路径上的可用操作(获取/提交…) 每个操作的输入/输出格式 目前V2.
这节将开始编写一个复杂的Hello World,涉及到许多的知识,建议大家认真思考其中的概念 需求 由于本实践偏向Grpc+Grpc Gateway的方面,我们的需求是同一个服务端支持Rpc和Restful Api,那么就意味着http2、TLS等等的应用,功能方面就是一个服务端能够接受来自grpc和Restful Api的请求并响应 一、初始化目录 我们先在$GOPATH中新建grpc-hello-world文件夹,我们项目的初始目录目录如下: grpc-hello-world/ ├── certs ├── client ├── cmd ├── pkg ├── proto │ ├── google │ │ └── api └── server certs:证书凭证 client:客户端 cmd:命令行 pkg:第三方公共模块 proto:protobuf的一些相关文件(含.
假定我们有一个项目需求,希望用Rpc作为内部API的通讯,同时也想对外提供Restful Api,写两套又太繁琐不符合 于是我们想到了Grpc以及Grpc Gateway,这就是我们所需要的 准备环节 在正式开始我们的Grpc+Grpc Gateway实践前,我们需要先配置好我们的开发环境 Grpc Protoc Plugin Protocol Buffers Grpc-gateway Grpc 是什么 Google对Grpc的定义: A high performance, open-source universal RPC framework 也就是Grpc是一个高性能、开源的通用RPC框架,具有以下特性: 强大的IDL,使用Protocol Buffers作为数据交换的格式,支持v2、v3(推荐v3) 跨语言、跨平台,也就是Grpc支持多种平台和语言 支持HTTP2,双向传输、多路复用、认证等 安装 1、官方推荐(需科学上网)
涉及知识点 自定义 log。 本文目标 在上一节中,我们解决了 API’s 可以任意访问的问题,那么我们现在还有一个问题,就是我们的日志,都是输出到控制台上的,这显然对于一个项目来说是不合理的,因此我们这一节简单封装log库,使其支持简单的文件日志! 新建logging包 我们在pkg下新建logging目录,新建file.go和log.go文件,写入内容: 编写file文件 1、 file.go: package logging import ( "os" "time" "fmt" "log" ) var ( LogSavePath = "runtime/logs/" LogSaveName = "log" LogFileExt = "log" TimeFormat = "20060102" ) func getLogFilePath() string { return fmt.
涉及知识点 JWT 本文目标 在前面几节中,我们已经基本的完成了 API’s 的编写,但是,还存在一些非常严重的问题,例如,我们现在的 API 是可以随意调用的,这显然还不安全全,在本文中我们通过 jwt-go (GoDoc)的方式来简单解决这个问题。 下载依赖包 首先,我们下载 jwt-go 的依赖包,如下: go get -u github.com/dgrijalva/jwt-go 编写 jwt 工具包 我们需要编写一个jwt的工具包,我们在pkg下的util目录新建jwt.go,写入文件内容: package util import ( "time" jwt "github.