go语言基础
文章平均质量分 83
go语言基础
vicent_uuid4
这个作者很懒,什么都没留下…
展开
-
Protobuf 和代码生成辅助方法
怎么修改 protobuf 生成的代码?生成好的代码从实践上来说是不应该修改的,而很不幸的 是,protobuf 对应不同插件生成的目标代码,只能改插件的源码;怎么为 protobuf 的字段添加额外的属性?可以通过 field option 来增加额外的属性,但是 这种新的属性需要你自己写代码解析;代码生成的常用场景?一般来说,样板代码都可以考虑使用代码生成来替换掉,比如典型 的利用代码生成来生成数据库查询(如ENT),生成增删改查的代码,生成前端代码;原创 2023-04-08 18:40:30 · 905 阅读 · 1 评论 -
SELECT SubQuery (子查询)
子查询可以用在很多地方,需要考虑的语法特性也非常多,这是一个比较复杂的功能。原创 2023-04-08 18:36:12 · 1872 阅读 · 0 评论 -
SELECT JOIN
* JOIN 语法有两种形态 **JOIN … ONJOIN … USING:USING 后面使用的是列** JOIN 本身有:**也就是说 JOIN 的结构大概可以描述成下面这几种,而且还可以嵌套。表 JOIN 表(表 JOIN 表) JOIN 表表 JOIN 子查询子查询 JOIN 子查询JoinBuilder 里面的 On 和 Using 是终结方法,也就是 直接返回了 Join , 这种设计可以避免用户同时调用 On 或者 Using。原创 2023-04-03 22:30:58 · 999 阅读 · 0 评论 -
RawQuerier 原生查询
就 MySQL SELECT 语句来说,ORM 框架能支持全部 语法吗?显然不能,也不愿意支持全部 , 也不仅仅是 ORM 框架,大多数框架设计的时候,都要考 虑提供兜底的措施,或者提供绕开你的框架的机制。在 ORM 这里,就是要允许用户手写 SQL,直接绕开 ORM 的各种机制。原创 2023-04-03 22:30:35 · 341 阅读 · 0 评论 -
AOP 方案
优点分查询类型:对增删改查有不同的 Hook;分时机:在查询执行前,或者在查询执行后。这种顺序是预定义好的;修改上下文:每一个 Hook 内部都是可以修改执行上下文的。例如可以利用 这个特性实现一个简单的分库分表中间件;用户用起来还是比较简单的,例如使用 AfterUpdate 的时 候,可以很清楚确定这个会在 Update 语句的时候被调用。缺点也很明显缺乏扩展性,用户指定不了顺序BeforeSave 和 AfterSave 有点令人困惑。原创 2023-04-03 22:30:45 · 701 阅读 · 0 评论 -
事务 API
事务的核心 APIBegin:开始一个事务Commit:提交一个事务Rollback:回滚一个事务需要定义一个新的结构体来表达事务的含义 , 这里本文引入全新的 Tx 来表达事务,和 GORM 的设计是很不一样的。这意味着 DB 在创建好之后,就是一个不可变的对象。这种设计也暗含了一个限制,即一个事务无法开启另 外一个事务,也就是我们的事务都是单独一个个的。如何使用 Tx 呢?原本的 Selector 接收的是 DB 作为参数,现在需要利用 Tx 来创建 Selector,怎么办?原创 2023-04-03 22:29:33 · 464 阅读 · 0 评论 -
DELETE Statement
DELETE 应该是增删改查里最简单的语句了。原创 2023-04-03 22:25:16 · 374 阅读 · 0 评论 -
SELECT 分组、排序与分页
常用的简单 SELECT 语句无疑包括了分组语法 GROUP BY 以及 分组后的条件过滤 HAVING,HAVING 的执行 由于在 WHERE、GROUP BY 和 聚合函数之后,所以 HAVING 也是支持聚合函数的 (;原创 2023-04-03 22:23:13 · 847 阅读 · 0 评论 -
SELECT 列和聚合函数
为什么 WHERE 里面不能使用聚合函数?从 DB 实现的角度来说,是因为聚合函数必须要在数据筛选出来 之后才能计算,也因此,HAVING 是可以使用聚合函数的。简单概括就是,在DB中, 处理顺序是 WHERE - GROUP BY - 聚合函数 - HAVING;WHERE 和 HAVING 的区别:最重要的就是能不能使用聚合函数作为查询条件,以及两者的执行顺序;聚合函数有哪些?常用的就是 Max、Min、Count、Sum、Avg。另外一个类似的问题是,DISTINCT 是不 是聚合函数?原创 2023-04-03 22:21:21 · 247 阅读 · 0 评论 -
ORM 框架
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。ORM框架是连接数据库的桥梁,只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息,把对象持久化到数据库中。ORM 框架的核心是什么?SQL 构造和处理结果集。在别的语言里面,因为底层库可能不够强大, ORM 框架还要解决连接和会话管理的问题,Go 是不需要的。ORM 是什么?ORM 是指对象关系映射,一般是。原创 2023-01-04 20:23:00 · 7074 阅读 · 0 评论 -
Go web框架 Echo
优点路由性能高更轻量级的web开发框架缺点调试不方便,报错信息不友好路由性能虽高,但是路由实现的算法底层不支持路由排序,会引起路由冲突。原创 2022-11-11 16:25:35 · 1329 阅读 · 0 评论 -
Go Web 框架 Iris
(1) 优点是社区驱动的Go语言Web 框架,支持http2,MVC。有着较高的社区活跃度和文档支持(2) 缺点不够稳定使用数量和国内开源贡献数量目前仍然不如Gin和Echo。原创 2023-04-03 22:18:02 · 447 阅读 · 0 评论 -
Go Web框架 Gin
优点支持路由分组运行速度快更好的支持 middleware 和 json灵活性更好(封装程度不如 beego 高), 也可以说是更轻量的框架缺点相比于 beego 更轻量,那么也就没有像 beege 那样提供更多的 api。原创 2022-11-11 16:19:13 · 370 阅读 · 0 评论 -
Go web框架 Beego
ControllerInterface 可以看做核心接口,因为它直接体现了Beego 的设计初衷:MVC 模式。同时它也是用户核心接入点。但是如果从功能特性上来说,HttpServer 和 ControllerRegister 才是核心。HttpServer 作为服务器抽象,用于管理应用生命周期和资源隔离单位。ControllerRegister 解决了路由注册和路由匹配问题。Context 和 Controller 为用户提供了丰富 API,用于辅助构建系统。简单。原创 2022-11-11 16:14:31 · 165 阅读 · 0 评论