专注PHP Golang开发
Golang OOM Golang OOM
什么是内存泄漏内存泄漏是指程序运行过程中,内存因为某些原因无法释放或没有释放。简单来讲就是,有代码占着茅坑不拉屎,让内存资源造成了浪费。如果泄漏的内存越堆越多,就会占用程序正常运行的内存。比较轻的影响是程序开始运行越来越缓慢;严重的话,可能
2023-05-05
Golang Patch Golang Patch
本文转自https://bou.ke/blog/monkey-patching-in-go/ 前提使用go build -gcflags=-l来构建,禁用内联。对于本文,假设架构是 64 位,并且使用的是基于 Unix 的操作系统,如 Ma
2022-01-05
Golang 并发编程 Golang 并发编程
ContextGo 语言中用来设置截止日期、同步信号,传递请求相关值的结构体 Deadline 被取消的时间,也就是完成工作的截止日期Done 返回一个 Channel,这个 Channel 会在当前工作完成或者上下文被取消后关闭,多次调用
2021-07-30
Golang 常用关键字 Golang 常用关键字
for range使用 for-range 的控制结构最终也会被 Go 语言编译器转换成普通的 for 循环 现象 循环永动机 如果我们在遍历数组的同时修改数组的元素,能否得到一个永远都不会停止的循环呢? func main() { a
2021-07-28
Golang 语言基础 Golang 语言基础
函数调用C语言 C 语言同时使用寄存器和栈传递参数,使用 eax 寄存器传递返回值,由于只使用一个寄存器存储返回值,所以 C 语言的函数不能同时返回多个值 优点:极大地减少函数调用的额外开销,CPU 访问栈的开销比访问寄存器高几十倍缺点:
2021-06-18
Golang 数据结构 Golang 数据结构
数组 数组是由相同类型元素的集合组成的数据结构,计算机会为数组分配一块连续的内存来保存其中的元素,我们可以利用数组中元素的索引快速访问特定元素 存储元素类型相同、但是大小不同的数组类型在 Go 语言看来也是完全不同的,只有两个条件都相同才
2021-05-20
Golang 内存管理 Golang 内存管理
内存分配器 程序中的数据和变量都会被分配到程序所在的虚拟内存中,内存空间包含两个重要区域:栈区(Stack)和堆区(Heap) Go语言会由工程师和编译器共同管理,堆中的对象由内存分配器分配并由垃圾收集器回收 设计原理3个组件:用户程序(
2021-05-10
Golang 编译原理 Golang 编译原理
预备知识抽象语法树 抽象语法树(Abstract Syntax Tree、AST),是源代码语法的结构的一种抽象表示,它用树状的方式表示编程语言的语法结构 抽象语法树中的每一个节点都表示源代码中的一个元素,每一棵子树都表示一个语法元素,以
2021-04-12
Golang 优雅重启长连接服务 Golang 优雅重启长连接服务
优雅重启长连接服务目前一些设备长连接服务,每次发布新版本都需要踢掉连接,然后再发布,本文研究go实现长连接服务器的优雅重启 我们要解决的事情: 如何做到不中断接收连接 如何做到已有连接不中断 第一个问题,如何做到不中断接受连接 看lin
2021-04-10
Golang 内存对齐 Golang 内存对齐
为什么要内存对齐 CPU访问内存时,并不是逐个字节访问,而是以字长(word size)为单位访问。比如32位的CPU,字长为4字节,那么CPU访问内存的单位也是4字节。 这么设计的目的,是减少CPU访问内存的次数,加大CPU访问内存的吞
2021-01-10
Golang 依赖管理 Golang 依赖管理
简述 Go 在做依赖管理时会创建两个文件,go.mod 和 go.sum go.mod 提供了依赖版本的全部信息,类似php的composer.json go.sum 具体的版本,类似php的composer.lock go.sum格式&
2021-01-10
Golang 指针 Golang 指针
指针类型*类型 普通指针类型,用于传递对象地址,不能进行指针运算 unsafe.Pointer 通用指针类型,用于转换不同类型的指针,不能进行指针运算,不能读取内存存储的值(必须转换到某一类型的普通指针) 特点: 任何类型的指针都可以
2021-01-09