GoLang从零开始系列
文章平均质量分 94
本系列参考极客兔兔,七天用Go从零实现系列整理而来
https://geektutu.com/post/gee.html
Binary Oracle
一名热爱开源和技术的Coder , 开源框架spring committer , golang开源网络库netpoll committer; (脱产备战25考研中,停更一年)
展开
-
从零实现ORM框架GeoORM-记录新增和查询-03
本系列参考: 7天用Go从零实现ORM框架GeeORM本系列源码: https://gitee.com/DaHuYuXiXi/geo-orm从本节开始,GeoORM 需要涉及一些较为复杂的操作,例如查询操作。查询语句一般由很多个子句(clause) 构成。SELECT 语句的构成通常是这样的: 也就是说,如果想一次构造出完整的 SQL 语句是比较困难的,因此我们将构造 SQL 语句这一部分独立出来,放在子package clause 中实现。首先在 clause/generator.go 中实现各个子句的原创 2022-09-06 19:15:59 · 449 阅读 · 0 评论 -
从零实现ORM框架GeoORM-对象表结构映射-02
本系列参考: 7天用Go从零实现ORM框架GeeORM本节内容:SQL 语句中的类型和 Go 语言中的类型是不同的,例如Go 语言中的 int、int8、int16 等类型均对应 SQLite 中的 integer 类型。因此实现 ORM 映射的第一步,需要思考如何将 Go 语言的类型映射为数据库中的类型。同时,不同数据库支持的数据类型也是有差异的,即使功能相同,在 SQL 语句的表达上也可能有差异。ORM 框架往往需要兼容多种数据库,因此我们需要将差异的这一部分提取出来,每一种数据库分别实现,实现最大程度原创 2022-09-01 18:04:45 · 359 阅读 · 0 评论 -
从零实现ORM框架GeoORM-database/sql基础-01
本系列参考: 7天用Go从零实现ORM框架GeeORM对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。那对象和数据库是如何映射的呢?举一个具体的例子,来理解 ORM。 第一条 SQL 语句,在数据库中创建了表 User,并且定义了 2 个字段 Name 和 Age;第二条 SQL 语句往表中添加了一条记录;最后一条语句返回表中的所有记录。假如我们使用了 ORM 框架,可以这么写: O原创 2022-08-31 11:15:35 · 408 阅读 · 0 评论 -
从零实现Web框架Geo教程-错误恢复-07
test_recover() 中的 after panic 没有打印,这是正确的,当 panic 被触发时,控制权就被交给了 defer。但是如果是无法恢复的错误,可以手动触发 panic,当然如果在程序运行过程中出现了类似于数组越界的错误,panic 也会被触发。在上面的代码中,我们为 geo 注册了路由 /panic,而这个路由的处理函数内部存在数组越界 names[100],如果访问 localhost:9999/panic,Web 服务就会宕掉。获取到调用该函数的文件名和行号,打印在日志中。...原创 2022-08-28 14:14:47 · 246 阅读 · 0 评论 -
从零实现Web框架Geo教程-模板-06
现在越来越流行前后端分离的开发模式,即 Web 后端提供 RESTful 接口,返回结构化的数据(通常为 JSON 或者 XML)。随着前端工程化的不断地发展,Webpack,gulp 等工具层出不穷,前端技术越来越自成体系了。但前后分离的一大问题在于,页面是在客户端渲染的,比如浏览器,这对于爬虫并不友好。因此,geo 框架要做的,仅仅是解析请求的地址,映射到服务器上文件的真实地址,交给。映射到真实的文件后,将文件返回,静态服务器就实现了。对象,前者将所有的模板加载进内存,后者是所有的自定义模板渲染函数。.原创 2022-08-28 11:17:20 · 254 阅读 · 0 评论 -
从零实现Web框架Geo教程-中间件-05
因为在设计中,中间件不仅作用在处理流程前,也可以作用在处理流程后,即在用户定义的 Handler 处理完毕后,还可以执行剩下的操作。我们上一篇文章分组控制 Group Control中讲到,中间件是应用在RouterGroup上的,应用在最顶层的 Group,相当于作用于全局,所有的请求都会被中间件处理。index是记录当前执行到第几个中间件,当在中间件中调用Next方法时,控制权交给了下一个中间件,直到调用到最后一个中间件,然后再从后往前,调用每个中间件在Next方法之后定义的部分。...原创 2022-08-28 10:24:25 · 276 阅读 · 0 评论 -
从零实现Web框架Geo教程-分组控制-04
当然了,按照我们一开始的分析,中间件是应用在分组上的,那还需要存储应用在该分组上的中间件(middlewares)。因此,我们今天实现的分组控制也是以前缀来区分,并且支持分组的嵌套。/分组应用日志中间件,/是默认的最顶层的分组,也就意味着给所有的路由,即整个框架增加了记录日志的能力。那么Group对象,还需要有访问Router的能力,为了方便,我们可以在Group中,保存一个指针,指向Engine,整个框架的所有资源都是由Engine统一协调的,那么就可以通过Engine间接地访问各种接口了。...原创 2022-08-28 09:48:02 · 245 阅读 · 0 评论 -
从零实现Web框架Geo教程-前缀树路由-03
之前,我们用了一个非常简单的map结构存储了路由表,使用map存储键值对,索引非常高效,但是有一个弊端,键值对的存储的方式,只能用来索引静态路由。那如果我们想支持类似于/hello/:name这样的动态路由怎么办呢?所谓动态路由,即一条路由规则可以匹配某一类型而非某一条固定的路由。例如/hello/:name,可以匹配/hello/geektutu、hello/jack等。动态路由有很多种实现方式,支持的规则、性能等有很大的差异。...原创 2022-08-27 22:33:10 · 437 阅读 · 0 评论 -
从零实现Web框架Geo教程-上下文-02
最重要的还是通过实现了 ServeHTTP 接口,接管了所有的 HTTP 请求。相比第一天的代码,这个方法也有细微的调整,在调用 router.handle 之前,构造了一个 Context 对象。我们将和路由相关的方法和结构提取了出来,放到了一个新的文件中router.go,方便我们下一次对 router 的功能进行增强,例如提供动态路由的支持。router 的 handle 方法作了一个细微的调整,即 handler 的参数,变成了 Context。用返回 JSON 数据作比较,感受下封装前后的差距。.原创 2022-08-27 15:54:00 · 327 阅读 · 0 评论 -
从零实现Web框架Geo教程-Http基础-01
要开发一个Web应用,我们首先会考虑框架的选型,对于Javaer来说,通常Spring mvc是Web开发的首选框架;如果使用GoLang进行开发,可能会选择Beego,Gin,Iris等,但是无论是哪一种Web框架其设计思想都是类似的。在我初学GoLang的net/http标准库时,我觉得标准库提供的功能已经帮助我们封装好了很多细节,例如: http协议的解析,请求参数的提取等等…我们完全可以直接利用net/http标准库进行简单的web程序开发,那为什么还需要在标准库上再封装上一层皮呢?........原创 2022-08-27 14:46:00 · 447 阅读 · 0 评论