Go Core - Entity
|Word Count:0|Reading Time:1mins
Author: zhongmingmao
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Related Articles

2022-05-15
Go Core - List + Ring

2022-05-15
Go Core - Array + Slice

2022-05-01
Go Engineering - Foundation - Error - Package
功能需求 支持错误堆栈 支持不同的打印格式,例如 %+v、%v、%s 等 支持 Wrap/Unwrap 功能:在已有 error 的基础上,追加一些新的信息 errors.Wrap(err, "open file failed") 调用 Wrap 时,会生成一个错误堆栈节点 支持 Is 方法:判断某个 error 是否为指定的 error Go 1.13 之前,并没有 wrapping error if err == os.ErrNotExist {} 有 wrapping error 后,直接用 == 判断会有问题,因为可能是 wrapping error func Is(err, target error) bool err 和 target 是同一个 当 err 是 wrapping error 时,target 包含在这个嵌套 error 链中 支持 As 函数 Go 1.13 之前,并没有 wrapping error,可以使用 type assertion 或者 type switch if perr, ok := err...

2022-04-23
Go Engineering - Foundation - Makefile
使用 先编写 Makefile 文件,指定整个项目的编译规则,然后通过 Linux make 命令来解析该 Makefile 文件,实现自动化 默认情况下,make 命令会在当前目录下,按照 GNUmakefile、makefile、Makefile(推荐)的顺序查找 make -f golang.mk 或者 make --file golang.mk 规则 规则一般由目标、依赖和命令组成,用来指定源文件编译的先后顺序 Makefile 规则可以自动判断是否需要重新编译某个目标,从而确保目标仅在需要时编译 规则语法 主要包括:target、prerequisites 和 command 1234target ...: prerequisites ... command ... ... target 可以是一个 object file,也可以是一个执行文件,还可以是一个标签 可以使用通配符,当有多个目标时,使用空格分隔 prerequisites:代表生成该 target 所需要的依赖项,当有多个依赖项时,使用空格分隔 command:代表该 target ...

2022-03-19
Go Engineering - Specification - Commit
规范化的优势 优势:Commit Message 可读性更好 + 自动化 清晰地知道每个 Commit 的变更内容 基于 Commit Message 进行过滤查找:git log --oneline --grep "^feat|^fix|^perf" 基于 Commit Message 生成 Change Log 基于 Commit Message 触发 CICD 流程 确定语义化版本的版本号 fix 类型映射为 PATCH 版本 feat 类型映射为 MINOR 版本 带有 BREAKING CHANGE 的 Commit 映射为 MAJOR 版本 Angular 规范 Angular 格式清晰,使用最为广泛;Angular 规范是一种语义化的提交规范 Commit Message 是语义化的 Commit Message 都会被归为一个有意义的类型,用来说明本次 Commit 的类型 Commit Message 是规范化的 Commit Message 遵循预先定义好的规范,可以被开发者和工具识别 样例 规范 Commit Message 组成部分:...

2022-10-10
Cloud Native Foundation - Go GC
Heap 管理 Allocator (向 OS 申请)初始化连续内存块作为 Heap Mutator 申请内存,Allocator 从 Heap 中未分配的区域中分割小的内存块 用链表将已分配内存连接起来 内存块元数据:大小、是否使用、下一个内存块的地址 Collector 会扫描 Heap,将不再被使用的内存设置为 unused 内存分配TCMalloc TC = Thread Caching page:内存页,大小为 8k,Go 与 OS 之间的内存申请和内存释放,都是以 page 为单位的 span:内存块,一个或者多个连续的 page 组成一个 span sizeclass:空间规格,每个 span 都带有一个 sizeclass,标记着该 span 中的 page 该如何使用 sizeclass - 8,16,32,48,64,80 … object:对象,用来存储一个变量数据的内存空间 span 在初始化时,会被切割成一堆等大的 object 如果 object 的大小为 16B,Span list 1 中的 span 为 8k,该 span 中的 page 会...
Announcement
Things are always unexpected!






