Golang|学习教程(七)-协程
Go 协程(Goroutine)是与其他函数同时运行的函数。可以认为 Go 协程是轻量级的线程,由 Go 运行时来管理。
对于 协程(用户级线程),这是对内核透明的,也就是系统并不知道有协程的存在,是完全由用户自己的程序进行调度的,因为是由用户程序自己控制,那么就很难像抢占式调度那样做到强制的 CPU 控制权切换到其他进程/线程,通常只能进行 协作式调度,需要协程自己主动把控制权转让出去之后,其他协程才能被执行到。
……记录所学所思所想,专注于Go语言、软件架构
Go 协程(Goroutine)是与其他函数同时运行的函数。可以认为 Go 协程是轻量级的线程,由 Go 运行时来管理。
对于 协程(用户级线程),这是对内核透明的,也就是系统并不知道有协程的存在,是完全由用户自己的程序进行调度的,因为是由用户程序自己控制,那么就很难像抢占式调度那样做到强制的 CPU 控制权切换到其他进程/线程,通常只能进行 协作式调度,需要协程自己主动把控制权转让出去之后,其他协程才能被执行到。
……本小节学习go语言的方法和接口,虽然go语言没有提供类的设计,但可以通过结构体来类比实现对应功能,而类具有对应的方法,同理结构体也可以有自己的函数,我们称之为方法,具体定义是在函数前面加上接收者。
……本小节学习go语言的map,map里面存储着键值对,通过键来快速获取对应的值,我们使用map[T]T
格式来定义集合,需要注意的是key的限制,map中的key可以是bool,数字,string,指针,channel还可以是只包含前面几个类型的接口,结构体,数组,但是不能使用slice,map还有function作为key,因为这几个没法用==来判断。
本小节学习go语言的数组和切片,一门编程语言肯定少不了基本数据结构数组,go语言中还有另外的类型切片,和数组的区别是数组的大小是固定的,是不可改动的,而切片是可以动态扩展的。
……本小节介绍go语言中的结构体,由于go语言没有面向对象的设计,但我们可以通过结构体去实现面向对象的继承、封装、多态特性。
在介绍结构体之前,还需要了解一下go语言中指针的相关概念和用法。和c语言一样,如果一个变量是指针,则表示这个变量存储的数据是指向其目标变量的存储地址。
……接下来学习go语言的基本流程控制,包含if、switch、for、defer四个关键字。
go语言与其他语言的一个不同之处,就是控制语句不需要额外的括号包裹,if语句的使用如下
……最新使用Python编写一些处理脚本,感觉与golang之间的语法开始模糊,因此决定根据官方文档,写一下golang的入门教程,顺便复习一下相关语法巩固基础。
包是golang里的最基本组成部件,go程序就是由一个个包组装起来的,例如程序入口main包。
……最近工作上遇到需要解析ttf字库的需求,判断给到的数据中是否有不存在ttf字库中的汉字,结果查询一遍之后发现,使用golang解析ttf做判定的代码基本没有,因此本文开始详细分析一波ttf字库文件,并尝试使用golang解析,实现相关需求。
……最近阅读《Python工匠:案例、技巧与工程实践》发现一些零零碎碎的之前不知道的知识点,因此总结记录方便以后翻找查阅。
变量解包是python里一种特殊的赋值操作,允许把可迭代的对象所有成员一次性赋值给多个变量。
……