摘要: 前两天在小破站看到zinx框架的教程,于是跟着学了学,实现完了换了个名叫 Kinx hhhhh~。有意愿的可以star一波~ https://github.com/k-si/Kinx 附一张整体架构图: 设计思想 tcp通信在代码层面上是非常简单的,因为几乎所有的语言都提供了套接字,套接字就是对底层 阅读全文
posted @ 2021-11-20 22:14 moon_orange 阅读(1527) 评论(0) 推荐(0) 编辑
摘要: golang中单例模式体现在很多地方, 比如init函数,当包被导入的时候只会被执行一次。实现单例模式有很多种方式,这里给出几种简单的实现: 互斥锁 对全局共享变量加锁,如果该变量不是nil,那么证明已经被创建了实例,直接返回它的值就好。 type singleton struct {} var ( 阅读全文
posted @ 2021-11-20 20:56 moon_orange 阅读(516) 评论(0) 推荐(0) 编辑
摘要: slice扩容代码在go/src/runtime/slice.go中,当前使用的使用的golang源码是GitHub中的master分支代码。时间是2021-10-11。 先抛出一个问题,你觉得应该是打印多少呢? var b = []int64{1, 1} b = append(b, 1, 1, 1 阅读全文
posted @ 2021-11-20 20:37 moon_orange 阅读(485) 评论(0) 推荐(0) 编辑
摘要: 对齐规则 1、对于结构体成员变量: 某个成员的偏移量 = k * min(编译器对齐系数, 该成员类型长度) k >= 1 2、结构体完整大小也必须满足: min(k * max(编译器对齐系数, 最大成员类型长度)) k >= 1 编译器默认对齐长度和计算机一次处理的的位数有关,32位处理器对齐系 阅读全文
posted @ 2021-11-20 20:36 moon_orange 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 逃逸分析 我们知道往往声明一个变量或者申请内存空间时,是需要区分内存区域的,有的可以申请栈空间,有的申请堆空间。go语言中决定变量是分配到栈还是堆,取决于go编译器对程序的逃逸分析。 在程序编译时,如果发现一个变量需要后续一直使用,往往会将其分配到堆内存。看例子: func test02() *in 阅读全文
posted @ 2021-11-20 20:33 moon_orange 阅读(37) 评论(0) 推荐(0) 编辑
摘要: 我们都知道go语言起一个线程是很简单的,但这其中也有很多问题(坑)。我在刚了解到并发时,常会思考以这样的方式达到两个线程之间的同步: var a string var done bool func setUp() { a = "hello world" done = true } func main 阅读全文
posted @ 2021-11-20 20:25 moon_orange 阅读(525) 评论(0) 推荐(0) 编辑
摘要: 动态和静态的区别 链表分静态链表和动态链表,工程里一般用动态链表,去new一个node,动态创建节点。静态链表一般用在刷算法题的时候,由于使用数组模拟,没有动态创建过程,并且使用数组下标代替next指针,所以静态链表的速度非常快,缺点就是非常消耗内存。 静态链表的结构 两个数组 静态链表中使用两个数 阅读全文
posted @ 2021-11-20 15:14 moon_orange 阅读(18) 评论(0) 推荐(0) 编辑