go-restfulapi案例demo1-demo8笔记

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: go-restfulapi案例demo1-demo8笔记

整体项目结构化,清晰化

各个包功能讲解:

f2f91c14b0584a82bd0cf88dd18ff0de.png


http健康自检

通常我们是直接启动http服务,没有进行自检操作,自检也非常重要,防止进程能启动,服务器却不能对外服务


配置文件的读取操作

借助viper读取配置文件,同时布置热加载


日志记录和管理

日志对我们挺重要,学会如何去初始化日志并且存储


数据库的配置

同时配置多个数据库,每个数据库的具体配置的结构化和便利化


管理错误码和分类错误

学会把错误码进行分类和统一规整,对我们后面项目的处理会方便很多


学会读取和返回http请求

在实体函数中返回http请求,让日志输出更加清晰化,检测每步操作正确与否


用户的逻辑处理

用户增删改查操作过程中对逻辑方法的存放和gorm对数据库的操作


H

http.ListenAndServe()

方法使用:ListenAndServe(监听地址,处理器),


http.HandleFunc()

方法使用:注册路由,handlefunc(路由请求路径,处理函数的函数)


L

log.Fatal()

方法使用:打印输出,退出程序,defer不执行


G

gin.Recovery()

方法使用:中间件:会恢复任何panic,并写入500,默认使用g.Default时候自带,使用g.New()时候,可以写


gin.Use()

前提:中间件分为 全局中间件 和 路由组中间件 前者靠gin.Use()实现,后者靠routergroup.group返回一个routergroup指针,以此来分别每个路由组加载的不同的中间件


gin.NoRoute()

方法使用:对于group中其他未定义的路径做处理,相当于if  else 中的else语句作用一样


gin.Context.Param()

方法使用:返回url参数的值


gin.Context.Query()

方法使用:返回url的地址参数


gin.Context.DefaultQuery()

方法使用:返回url的地址参数,如果参数不在,则返回默认值


gin.Context.Bind()

将消息体作为指定的格式解析到go  struct中


gin.Context.GetHeader()

获取http头


P

pflag.StringP()

方法使用:支持长选项,短选项,默认值和使用文本,并将标志的值存储在指针中


pflag.Parse()

方法使用:将用户传递的行参解析为对应变量的值


第一步:搭建路由和http健康自检

流程:main中定义引擎,启动路由,定义并引用中间件,如:磁盘使用率检测,是否ping成功http,cpu使用率检测,并搭建相关路径路由;通过在main另起一个进程,来进行ping http,如果连续ping不通的话,则返回错误,以此达到自检效果


第二步:使用viper进行配置文件读取和热加载

经过第一步操作,我们可以通过访问http来判断是否正常连接,viper这个库可以帮助我们进行配置文件的读取和相关文件热加载,在主函数中引入,创建一个config包,利用viper库来进行相关配置文件的读取,并实现热加载函数,可以自定义配置文件路径或者使用默认路径,通过viper读取配置好的文件中的信息替换第一步端口和路径,同时修改文件也不用重新启动


第三步:配置文件日志设置和读取

在第二步基础上,我们在conf配置文件设置log相关的配置,然后在config配置文件中实现相关方法,这里需要注意的是要引用 "github.com/lexkong/log" 这个库中的相关方法


第四步:搭建和配置数据库

通过sql在数据库中创建数据库和建表,在conf配置文件中加入相关数据库数据,数据库的相关实现在model文件中实现,可以通过定义一个结构体来实现对多个数据库的连接,最后通过main主函数调用并可控关闭。


第五步:自定义错误码

通常将err错误放进pkg包中,定义常用的错误码,错误码分为系统,用户,和自定义,同时需要另写一个程序来来实现错误码,此时我们就可以在生产过程中遇到判断错误时候直接调用我们的错误码即可。


第六步:读取和返回http

针对需要返回的HTTP Header、路径参数、URL参数、消息体,gin框架中自带的方法可以很好的解决这些问题,通过增加一个sendresponse函数,在多处都能调用,在处理业务和返回数据时都很有用。


第七步:用户的增删改查操作

分别实现在数据库中创建post,更新put,删除delete,查询get操作,通过apiport节点使用示例检测完毕,正常执行。


第八步:使用中间件

中间件分为全局(注册中间件的过程之前设置的路由,将不会受注册的中间件所影响。只有注册了中间件之后代码的路由函数规则,才会被中间件装饰 )单个路由中间件,群组中间件,


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
存储 消息中间件 大数据
Go语言在大数据处理中的实际应用与案例分析
【2月更文挑战第22天】本文深入探讨了Go语言在大数据处理中的实际应用,通过案例分析展示了Go语言在处理大数据时的优势和实践效果。文章首先介绍了大数据处理的挑战与需求,然后详细分析了Go语言在大数据处理中的适用性和核心技术,最后通过具体案例展示了Go语言在大数据处理中的实际应用。
|
2月前
|
Shell Go API
Go语言grequests库并发请求的实战案例
Go语言grequests库并发请求的实战案例
|
16天前
|
安全 Go 开发者
代码之美:Go语言并发编程的优雅实现与案例分析
【10月更文挑战第28天】Go语言自2009年发布以来,凭借简洁的语法、高效的性能和原生的并发支持,赢得了众多开发者的青睐。本文通过两个案例,分别展示了如何使用goroutine和channel实现并发下载网页和构建并发Web服务器,深入探讨了Go语言并发编程的优雅实现。
30 2
|
3月前
|
SQL 关系型数据库 MySQL
【go笔记】使用sqlx操作MySQL
【go笔记】使用sqlx操作MySQL
|
3月前
|
Go
【go笔记】标准库-strconv
【go笔记】标准库-strconv
|
3月前
|
网络协议 前端开发 Go
[go笔记]websocket入门
[go笔记]websocket入门
|
3月前
|
网络协议 Go
【go笔记】简单的http服务
【go笔记】简单的http服务
|
3月前
|
网络协议 Go
【go笔记】TCP编程
【go笔记】TCP编程
|
3月前
|
Go 索引
【go笔记】标准库-strings
【go笔记】标准库-strings
|
3月前
|
Go
【go笔记】目录操作
【go笔记】目录操作