- 博客(294)
- 资源 (1)
- 收藏
- 关注
原创 Go 收藏积累 慢慢登记防止忘记
个人推荐:http://godeye.org/index.php?a=course&id=6http://mikespook.com/learning-go/http://coolshell.cn/articles/8460.htmlhttp://coolshell.cn/articles/8489.htmlhttps://code.google.com/p/go-zh/http://b...
2016-04-21 13:27:00 1012
原创 golang Pool实战与底层实现
我们从上面的源码分析了解Pool的数据结构、Get、Put这些基本操作原理,在项目中我们可以使用比特位来减少内存的占用,从源码分析我们得知Go官方设计不允许进行Pool复制(君子协议), 还学到了一个延迟处理下标的小技巧。
2023-12-01 13:48:59 742
原创 golang WaitGroup的使用与底层实现
源码分析了解WaitGroup的数据结构、Add、Done和Wait这些基本操作原理,在项目中我们可以使用比特位来减少内存的占用,从源码分析我们得知Go官方设计不允许进行WaitGroup复制(君子协议)与并发调度同一个WaitGroup操作。
2023-11-30 10:46:07 748
原创 golang channel执行原理与代码分析
从源码的角度分析channel的数据结构、发送数据、接收数据和关闭这些基本操作, 业务中对性能要求比较高建议不要使用chan。
2023-11-29 10:19:58 3120
原创 golang panic关键词执行原理与代码分析
从上面的源码我们可以了解到panic的大致逻辑,当使用panic关键词时,将painc加入到G的_panic链表中去. 调度时 defer func() {recover()}(),会改写_painc中的recovered字段,可恢复的panic必须要recover的配合。而且这个recover必须位于同一goroutine的直接调用链上,否则无法对 panic 进行恢复,未写完有些细节点还是没读懂,后续查阅资料补充。
2023-11-25 09:02:43 536
原创 linux如何获取CPU使用率
编程性 : 一个程序可以通过文件与其他程序通信,使得程序之间的交互、测试、集成等行为变得更容易,并且可以针对不同的应用场景,使用适用的编程语言来编写代码,提升灵活性和开发效率。Linux 将资源抽象为文件表示,那么和 CPU 相关的数据是否也会被抽象为文件,进而保存在某个文件中呢?统一接口: 使用相同的 API 可以对所有类型的文件进行操作,例如读取、写入、移动、删除、修改权限等。简化管理: 使用相同的工具和方式来管理文件和设备的操作,例如备份、复制、移动、删除、链接等。
2023-11-25 09:00:22 626
原创 golang defer关键词执行原理与代码分析
从上面的源码我们可以了解到defer的大致逻辑,当使用defer关键词时,会将当前要延迟的函数加入到G的延迟链表中去,当我们的函数执行完成后会触发deferreturn调度将G中的延迟链表循环执行一遍,来达到延迟执行的目的。
2023-11-25 08:57:51 527
原创 rust 中protobuf生成与使用
由于我们的项目中没有pb的这个目录 需要手动创建一下,我们的整体结构如下。修改Cargo.toml文件 我们需要加一下 我们需要的依赖包。查看在我们刚刚创建的pb文件夹下是否有一个hello.rs文件。进入到这个文件夹中 创建我们的proto文件。新建一个hello.proto文件内容如下。然后运行cargo build 结果如下。在pb目录创建mod.rs文件 内容如下。初始化的项目结构是这个样子的。首先创建一个项目proto。执行cargo run。
2023-05-26 20:45:00 1943 1
原创 rust 数据类型集合
指明目前Rust并没有确定扩容的策略,以后可能会改变),然后将原vec中的元素拷贝到新内存位置处,同时更新vec的胖指针中的元数据。当向vec插入新元素时,如果没有空闲容量,则会重新申请一块内存,大小为原来vec内存大小的两倍(Rust有两种字符串类型:str和String。str和String的联系和区别。vec使用枚举存储多个类型。
2023-05-25 21:00:00 207
原创 rust cargo expand报错
cargo expand 命令需要 Rust 的 Nightly 版本才能正常工作,而默认的 Rust 版本是 Stable。在 Nightly 版本中,rustc 工具支持 -Z 选项,而该选项在 Stable 版本中是禁用的,因此需要切换到 Nightly 版本,或在 Stable 版本中使用类似 cargo expand 的其他工具。
2023-05-23 21:00:00 292
原创 rust 操作符
操作符 作用 实例 + 加法、字符串拼接 1+2, "Hello " + “world!” - 减法、负数 4-1, -3 * 乘法 3*4 / 除法 10/2 % 取模运算 12%5 == 判断相等 3==5 != 判断不相等 3!=5 < 判断小于 4<5 <= 判断小于等于 4<=4 > 判断大于 5&
2023-05-11 20:30:00 112
原创 rust println!格式化输出
格式 格式说明 样例代码 输出效果 {} 将任何实现了std::fmt::Display trait的类型格式化为字符串输出 println!("Hello, {}!", "world"); Hello, world! {:?} 以调试模式打印任何实现了std::fmt::Debug trait的类型 println!("Debug: {:?}", [1, 2, 3]); Debug: [1, 2, 3] {:#?} 在调试模式下将
2023-05-09 21:30:00 921
原创 rust 中的类型与取值范围
类型 取值范围 bool true 或 false char 单个 Unicode 字符 i8 -128 到 127 i16 -32768 到 32767 i32 -2147483648 到 2147483647 i64 -9223372036854775808 到 9223372036854775807 i128 -170141183460469231731687303715884105728 到 1701411834604692
2023-05-09 21:00:00 690
原创 rust 内置关键词与作用
关键词 作用 as 类型转换 break 跳出循环 const 定义常量 crate 声明当前模块 enum 定义枚举类型 extern 定义外部模块,用于与其他语言的代码交互 fn 定义函数 for 迭代循环 impl 给一个类型实现方法或 Trait if 条件语句 in 确定循环迭代的范围 let 声明变量 loop 无限循环 match 模式匹配 mo
2023-05-09 20:45:00 231
原创 rust vscode编辑器常用插件与配置
插件的完整手册地址:https://rust-analyzer.github.io/manual.html。会实时编译和分析你的 Rust 代码,提示代码中的错误,并对类型进行标注。基于 AI 的自动补全,可以帮助你更快地撰写代码。Rust 使用 toml 做项目的配置管理。帮助你分析当前项目的依赖是否是最新的版本。插件: rust test lens。插件:rust-analyzer。插件: rust syntax。插件: better toml。搜索open user set。插件: crates。
2023-05-05 20:15:00 1477
原创 GeoHash 的编码方法
在进行第一次二分区时,经度范围[-180,180]会被分成两个子区间:[-180,0) 和[0,180](左、右分区)。第一次二分区:把经度区间[-180,180]分成了左分区[-180,0] 和右分区[0,180],此时,经度值 116.37 是属于右分区[0,180],用 1 表示第一次二分区后的编码值。第三次二分区:对[90,180]进行二分区,分成[90,135]和[135, 180],经度值 116.37 落在了分区后的左分区[90, 135] 中,所以,第三次分区后的编码值就是 0。
2023-01-13 11:17:22 677
原创 golang 摄像头截图vdk版本
视频流生成图片部分 开源库使用cgo调用ffmpeg 需要安装对应的依赖软件。依赖 github.com/deepch/vdk 开源库。
2022-11-16 20:00:00 940
原创 golang gc优化积累
函数尽量不要返回map, slice对象, 这种频繁调用的函数会给gc 带来压力。小对象要合并。函数频繁创建的简单的对象,直接返回对象,效果比返回指针效果要好。避不开,能用sync.Pool 就用,虽然有人说1.10 后不推荐使用sync.Pool,但是压测来看,确实还是用效果,堆累计分配大小能减少一半以上。类型转换要注意,官方用法消耗特别大,推荐使用雨痕的方式。避免反复创建slice。...
2022-03-15 11:10:40 839
原创 golang ring buffer
package mainimport ( "errors" "fmt")func main() { rb, _ := NewRingBuffer(10) for i := 1; i < 5; i++ { rb.Write(i) } for i := 0; i < 10; i++ { fmt.Println(rb.Read()) }}type RingBuffer struct { data []int size int6.
2022-03-02 09:42:58 229
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人