Golang|truetype解析
最近工作上遇到需要解析ttf字库的需求,判断给到的数据中是否有不存在ttf字库中的汉字,结果查询一遍之后发现,使用golang解析ttf做判定的代码基本没有,因此本文开始详细分析一波ttf字库文件,并尝试使用golang解析,实现相关需求。
……记录所学所思所想,专注于Go语言、软件架构
最近工作上遇到需要解析ttf字库的需求,判断给到的数据中是否有不存在ttf字库中的汉字,结果查询一遍之后发现,使用golang解析ttf做判定的代码基本没有,因此本文开始详细分析一波ttf字库文件,并尝试使用golang解析,实现相关需求。
……当我们使用go tool compile -S -N -l xxx.go
命令,查看go语言对应的汇编代码时,生成的一行行汇编指令可能让人困惑,由于Go 使用了plan9 汇编,因此这篇文章接下来记录一下基础的plan9汇编知识。
接口是一种抽象类型,它没有暴露所含数据的布局或者内部结构,当然也没有哪些数据的基本操作,所提供的仅仅是一些方法。当你拿到一个接口类型的变量,你无从知道它是什么,但你能知道它能做什么,或者更精确地讲,仅仅是它提供了哪些方法。
……在单机系统中我们会使用自增id作为数据的唯一id,自增id在数据库中有利于排序和索引,但是在分布式系统中如果还是利用数据库的自增id会引起冲突,自增id非常容易被爬虫爬取数据。在分布式系统中有使用uuid作为数据唯一id的,但是uuid是一串随机字符串,所以它无法被排序。
……go中使用for select 结构,select的break只能跳出break,不能跳出for循环
|
|
向关闭的chan读取数据,chan会返回相关的空数据,内置类型返回0值数据,自定义struct返回空指针
……go test {测试文件所在包目录}
$ go test -v -test.run {函数名xxx}
go test -coverprofile cp.out
-go tool cover -html=cp.out
-blockprofilerate n
:goroutine 阻塞时候打点的纳秒数。默认不设置就相当于 -test.blockprofilerate=1,每一纳秒都打点记录一下。-coverprofile cover.out
:在所有测试通过后,将覆盖概要文件写到文件中。设置过 -cover。-cpuprofile cpu.out
:在退出之前,将一个 CPU 概要文件写入指定的文件。-memprofile mem.out
:在所有测试通过后,将内存概要文件写到文件中。-memprofilerate n
:开启更精确的内存配置。如果为 1,将会记录所有内存分配到 profile。go test -bench=.
panic 关键字在 Go 语言的源代码是由数据结构runtime._panic
表示的。每当我们调用 panic 都会创建一个如下所示的数据结构存储相关信息:
|
|
结构体中字段含义说明:
……垃圾回收(Garbage Collection,简称GC)是编程语言中提供的内存管理功能。
通过引入了语言层面的自动内存管理,也就是语言的使用者只用关注内存的申请而不必关心内存的释放,内存释放由虚拟机(virtual machine)或运行时(runtime)来自动进行管理。这种对不再使用的内存资源进行自动回收的功能就被称为垃圾回收。
……