go-zero源码学习
2023-04-18 14:43:55 时间
文章目录
框架:
1、框架的作用就是简化开发。其中之一就是已经有很多轮子。如:生成n位随机字符串。如:封装redis使能兼容集群和单node 2、读懂xxxConf就读懂了框架结构 rest配置:(很大,框架无非rest和rpc两部分)
3、internal.svc(服务上下文)
- Context(上下文)相当于一个全局对象。类似laravel的App
- 上下文的思路和其他go-kit微服务框架一致 4、写go要要用js的思维,不能用PHP的思维(强化PHP的面对对象思维+迭代器模式【laravel的model,那个链感觉就永远不会断似的】)。
- 一套嵌一套
- 一套东西只是做一个参数在使用。
一、core 内核部分
1、这里面的东西是可以直接拿来使用的,不要重复造轮子。
1、conf
将json、yaml、yml转为internal/config下对应的map结构数据
重点: 1、框架所有的配置都是一个xxxconf样式的struct(结构体) 2、通过使用core.mapping模块将yaml格式转化成类似map数据格式的struct
2、mapping
多少和字典数据有关
3、store
1、Cache.ClusterConf-Cache.NodeConf-redis.RedisConf依次为前一个的字元素
3.1、cache
1、在CacheConf对比RedisConf就多了一个权重参数
3.1.1、redis
1、封装redis使能兼容集群和单node
3.1.2、sqlc 带缓存的sql语句
1、框架不厌其烦的将每次mysql查询、查询结果做了redis缓存 如:QueryRow
return cc.cache.Take(v, key, func(v interface{}) error {
return query(cc.db, v)
})
3.1.3、sqlx 直接执行(exec)
1、mysql操作的一种封装。里面带有orm操作(不要重复轮子) 2、缓存没有,则直接查mysql
err := m.QueryRow(&resp, userIdKey, func(conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", userRows, m.table)
return conn.QueryRow(v, query, id)
})
这段代码可以看出sqlc、sqlx都有相同的函数名称。都是获取一行数据。sqlc没有用sqlx
4、stringx
1、处理字符串的框架之组件。如:n位随机字符串。
二、rest部分
三、rpc部分
相关文章
- EasyCVR对接华为iVS订阅摄像机和用户变更请求接口介绍
- 精选 | 腾讯云CDN内容加速场景有哪些?
- 模块化网络防止基于模型的多任务强化学习中的灾难性干扰
- 用搜索和注意力学习稳健的调度方法
- 用于多变量时间序列异常检测的学习图神经网络
- 助力政企自动化自然生长,华为WeAutomate RPA是怎么做到的?
- 使用腾讯轻量云搭建Fiora聊天室
- TSRC安全测试规范
- 云计算“功守道”
- 助力成本优化,腾讯全场景在离线混部系统Caelus正式开源
- Flink 利器:开源平台 StreamX 简介
- 腾讯云实践 | 一图揭秘腾讯碳中和?解决方案
- 深度学习中的轻量级网络架构总结与代码实现
- 信息系统项目管理师(高项复习笔记三)
- Adobe国际认证让科技赋能时尚
- c++该怎么学习(面试吃土记)
- 面试官问发布订阅模式是在问什么?
- 面试官:请实现一个通用函数把 callback 转成 promise
- 空中悬停、翻滚转身、成功着陆,我用强化学习「回收」了SpaceX的火箭
- 中山大学林倞解读视觉语义理解新趋势:从表达学习到知识及因果融合