type
status
date
slug
summary
tags
category
icon
password
Edited
May 28, 2023 08:40 AM
Created
May 28, 2023 08:34 AM
链接
自己跟着做的
go-framework-7days
JinSooo • Updated May 15, 2023
截取部分
Gee
一个简单的 Web 框架(Gin)
net/http 提供了基础的 Web 功能,即监听端口,映射静态路由,解析 HTTP 报文。一些 Web 开发中简单的需求并不支持,需要手工实现。
- 动态路由:例如 hello/:name,hello/*这类的规则。
- 鉴权:没有分组/统一鉴权的能力,需要在每个路由映射的 handler 中实现。
- 模板:没有统一简化的 HTML 机制。
- ...
当我们离开框架,使用基础库时,需要频繁手工处理的地方,就是框架的价值所在。那么理解这个微框架提供的特性,可以帮助我们理解框架的核心能力。
- 路由(Routing):将请求映射到函数,支持动态路由。例如'/hello/:name。
- 模板(Templates):使用内置模板引擎提供模板渲染机制。
- 工具集(Utilites):提供对 cookies,headers 等处理机制。
- 插件(Plugin):Bottle 本身功能有限,但提供了插件机制。可以选择安装到全局,也可以只针对某几个路由生效。
- ...
特性 👇👇👇
基本使用
GeeCache
一个简单的 分布式缓存 框架(groupcache)
设计一个分布式缓存系统,需要考虑资源控制、淘汰策略、并发、分布式节点通信等各个方面的问题。而且,针对不同的应用场景,还需要在不同的特性之间权衡,例如,是否需要支持缓存更新?还是假定缓存在淘汰之前是不允许改变的。不同的权衡对应着不同的实现。
groupcache 是 Go 语言版的 memcached,目的是在某些特定场合替代 memcached。groupcache 的作者也是 memcached 的作者。无论是了解单机缓存还是分布式缓存,深入学习这个库的实现都是非常有意义的。
GeeCache 基本上模仿了 groupcache 的实现。支持特性有:
- 单机缓存和基于 HTTP 的分布式缓存
- 最近最少访问(Least Recently Used, LRU) 缓存策略
- 使用 Go 锁机制防止缓存击穿
- 使用一致性哈希选择节点,实现负载均衡
- 使用 protobuf 优化节点间二进制通信
- ...
特性 👇👇👇
基本使用
GeeORM
GeeORM 的设计主要参考了 xorm,一些细节上的实现参考了 gorm。GeeORM 的目的主要是了解 ORM 框架设计的原理,具体实现上鲁棒性做得不够,一些复杂的特性,例如 gorm 的关联关系,xorm 的读写分离没有实现。目前支持的特性有:
- 表的创建、删除、迁移。
- 记录的增删查改,查询条件的链式操作。
- 单一主键的设置(primary key)。
- 钩子(在创建/更新/删除/查找之前或之后)
- 事务(transaction)。
- ...
特性 👇👇👇
基本使用
GeeORM
RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,允许调用不同进程空间的程序。RPC 的客户端和服务器可以在一台机器上,也可以在不同的机器上。程序员使用时,就像调用本地程序一样,无需关注内部的实现细节。
GeeRPC 选择从零实现 Go 语言官方的标准库 net/rpc,并在此基础上,新增了协议交换(protocol exchange)、注册中心(registry)、服务发现(service discovery)、负载均衡(load balance)、超时处理(timeout processing)等特性。
基本使用
需要导出的方法
- 作者:JinSo
- 链接:https://jinso365.top/article/go-framkwork-geektutu
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。