构建自己高效的workflow

喜欢去探索各种效率工具,自然离不开alfred。alfred可以完成很多事情,其中包括打开各种app,搜索文件,搜索引擎等太多了。

这篇文章主要是记录 关于 Alfred的workflow的开发

查看更多

分享到 评论

高阶函数编程技巧

函数是 Go 语言的一等公民,如何利用好其高级用法特性,是一件值得思考和实践的事情

查看更多

分享到 评论

golang逃逸分析

堆内存与栈内存

Go 程序会在 2 个地方为变量分配内存,一个是全局的堆(heap)空间用来动态分配内存,另一个是每个 goroutine 的栈(stack)空间。

查看更多

分享到 评论

gin源码阅读

整体结构认识

查看更多

分享到 评论

由一行代码引发的变量分配思考

整个包都只有一行有效代码,或许是一件值得思考的事情

查看更多

分享到 评论

go panic探索

panic 发生之后,如果 Go 不做任何特殊处理,默认行为是打印堆栈,退出程序。

panic 到底是什么?

  1. panic( ) 函数内部会产生一个关键的数据结构体 _panic ,并且挂接到 goroutine 之上;
  2. panic( ) 函数内部会执行 _defer 函数链条,并针对 _panic 的状态进行对应的处理;

    查看更多

分享到 评论

Golang Context包 详解

context 主要用来在 goroutine 之间传递上下文信息,包括:取消信号、超时时间、截止时间、k-v 等。

context 用来解决 goroutine 之间退出通知元数据传递的功能。

查看更多

分享到 评论

2020年总结

终于、拖到了现在来整理年终总结(其实早就写得差不多)了。原计划是在年前换完工作然后就写这篇总结的,但是又有一些小插曲,所以也不得不将选择的时机放在年后了。大概也有前年出差的那段时间令我不是很愉快,具体的事情也就没有必要在这里写了。成年人的世界里没有容易的,需要做的事情就是要不断让自己成长。有一天能够有更多的主动选择权,而不是被动的选择。

查看更多

分享到 评论

golang 切片

切片结构

1
2
3
4
5
type slice struct {
array unsafe.Pointer
len int
cap int
}
1
2
a = make([]int, 0)
unsafe.Sizeof(a) // 24

切片组成元素:

  • 指针:指向底层数组
  • 长度:切片中元素的长度,不能大于容量
  • 容量:指针所指向的底层数组的总容量

    查看更多

分享到 评论

内存对齐

内存对齐

内存


CPU要想从内存读取数据,需要通过地址总线,把地址传输给内存,内存准备好数据,输出到数据总线
若是32位地址总线,可以寻址[0,2的32次方-1],占用内存4g
image.png


有些CPU是能够支持访问任意地址的,它是做了很多处理,比如想从地址1读取8字节的数据,CPU会分2次读,第一次从0-7,只取后7字节,第二次从8-15,但只取第一字节。把2次结果拼接起来拿到所需数据。这样比较耗费性能,编译器会把各种类型的值安排到合适的位置,并占用合适的长度。每种类型的对齐边值就是它的对齐边界。int16(2),int32(4),内存对齐要求数据存储地址以及占用的字节数都是它对齐边界的倍数。

查看更多

分享到 评论