go的web框架Context设计Context - 处理内容 处理输入要解决的问题 反序列化输入:将body字节流转换成一个具体的类型; 处理表单输入:可以看做是一个和json或者xml差不多的一种特殊的序列化方式; 处理查询参数:指从URL中的查询参数中读取值,并且转化为对应的类型; 处理路径参数:读取路径参数的值,并且转化为具体的类型; 重复读取body:http.Request里的Bwxvirus2023年10月25日GoCore大约 9 分钟
web框架核心-Serverweb 核心-Server web 核心 对于一个web框架来说,至少要提供三个抽象: 代表服务器的抽象,这里称之为Server; 代表上下文的抽象,这里称之为Context; 路由树; Server " 整体代表服务器的一个抽象,至少提供 3 部分功能" 生命周期控制:启动、关闭,或者有回调特性; 路由注册接口:提供路由注册功能; 作为http包到web框wxvirus2023年4月9日GoCore大约 3 分钟
gin 自定义验证器和翻译响应内容gin 自定义验证器和翻译响应内容 validator 翻译文档地址 https://github.com/go-playground/validator/blob/master/\_examples/translations/main.gowxvirus2023年2月6日GoCore大约 1 分钟
gRPC 的超时机制gRPC 的超时机制 使用context包自带的WithTimeout函数进行设置超时时间 客户端 服务端 它会有一个错误信息: protobuf 生成的源码内容有什么 proto文件 它生成的结构体 1. 生成对应的接口 2. 将这些方法注册到gRPC 3. 服务端是生成接口,我们只需要去每个接口中实现对应的业务逻辑 4. 客户端需要帮我们生成对应的方法,wxvirus2023年2月6日GoCore大约 1 分钟
接口的隐式和显式Go 隐式接口的特点 只要实现了接口的全部方法,就是自动实现接口; 可以在不修改代码的情况下抽象出新的接口; 一个简单的接口示例 一个接口的值的底层表示 接口数据使用runtime.iface表示; iface记录了数据的地址; iface记录了接口的类型信息和实现的方法(可以用于类型断言); 类型断言 类型断言是一个使用在接口值上的操作; 可以将接口值转换wxvirus2022年7月18日GoCoreinterface小于 1 分钟
解决map并发的问题示例代码 报错 并发的读和写,遇到这种它就会给你报错,一点余地都不给你留。 map 的并发问题 map的读写有并发问题; A 协程在桶中读取数据时,B 协程驱逐了这个桶,它就有并发问题;A 协程就会读到错误的数据或者找不到数据; 解决方案 给map加锁(mutex),如果加了锁,就表示同一时刻就只能有一个协程去访问它,所以这样也会减少一个性能; 我们可以使用wxvirus2022年7月17日GoCoresyncdirty大约 1 分钟
map的扩容map 为什么要扩容 源码位置:runtime包下的map.go里的mapassign方法 map溢出桶太多时会导致严重的性能下降; runtime.mapassign()可能会触发扩容; 装载因子超过 6.5(平均每个槽 6.5 个key); 使用了太多溢出桶(溢出桶超过了普通桶的数量就要开始考虑扩容); map 扩容的类型 等量扩容:数据不多但是溢出桶太wxvirus2022年7月17日GoCoregrownbucket大约 2 分钟
Map的底层定义 存储一个 KV 模式的数据类型 案例: 遍历操作 这里的k也可以使用_进行省略 几次运行下来,可以发现一个问题: " 有时候键”name“是在前面的,有时候键”quality“是在前面的。" 这说明了一个这个k 在map里是无序的,而且底层是HashMap 获取 map 的值 这里我们测试了一个不存在的k去获取值,此时会得到一个空的字符串,虽然在控制台wxvirus2022年6月24日GoCoretheorymap大约 6 分钟
ELF文件结构编译好的含有程序指令+程序数据的二进制文件 - ELF 文件结构 可以输入man elf来查看一些手册内容。 查看go编译出的二进制文件 这个就是ELF文件头信息。 程序头表(program header)只有可执行文件或动态库文件才有,目标文件【可重定位文件】是没有的。 使用如下命令来查看程序头表 有 7 段程序头表。 R E:可读可执行,对应的应该是代码wxvirus2022年4月30日GoCore大约 3 分钟
动态链接动态链接 这就是一个动态链接。 简单写一个c语言代码 /lib64/ld-linux-x86-64.so.2 (0x00007f53822ff000):动态链接文件ld动态链接器; libc.so.6 => /lib64/libc.so.6 (0x00007f5381f31000):C 运行库; linux-vdso.so.1 => (0x00007ffcfwxvirus2022年4月24日GoCore小于 1 分钟