11 2019 档案

摘要:1. goroutine源码分析 1.1 初始化 go程序的启动流程分为四步 call osinit, 这里就是设置了全局变量ncpu = cpu核心数量 call schedinit make & queue new G (runtime.newproc, go func()也是调用这个函数来创建 阅读全文
posted @ 2019-11-28 16:49 滴巴戈 阅读(969) 评论(0) 推荐(2)
摘要:1. goroutine的使用 在Go语言中,表达式go f(x, y, z)会启动一个新的goroutine运行函数f(x, y, z),创建一个并发任务单元。即go关键字可以用来开启一个goroutine(协程))进行任务处理。 创建单个goroutine 1 package main 2 3 阅读全文
posted @ 2019-11-26 19:54 滴巴戈 阅读(4137) 评论(0) 推荐(0)
摘要:1. defer的使用 defer 延迟调用。我们先来看一下,有defer关键字的代码执行顺序: 1 func main() { 2 defer func() { 3 fmt.Println("1号输出") 4 }() 5 defer func() { 6 fmt.Println("2号输出") 7 阅读全文
posted @ 2019-11-21 20:59 滴巴戈 阅读(2246) 评论(0) 推荐(1)
摘要:1. select的使用 定义:在golang里头select的功能与epoll(nginx)/poll/select的功能类似,都是坚挺IO操作,当IO操作发生的时候,触发相应的动作。 1.1 一些使用规范 在Go的语言规范中,select中的case的执行顺序是随机的,当有多个case都可以运行 阅读全文
posted @ 2019-11-20 17:03 滴巴戈 阅读(1889) 评论(0) 推荐(0)
摘要:1. channel的使用 channel,通道。golang中用于数据传递的一种数据结构。是golang中一种传递数据的方式,也可用作事件通知。 1.1 声明、传值、关闭 使用chan关键字声明一个通道,在使用前必须先创建,操作符 <- 用于指定通道的方向,发送或接收。如果未指定方向,则为双向通道 阅读全文
posted @ 2019-11-20 09:31 滴巴戈 阅读(4664) 评论(0) 推荐(1)
摘要:1. 接口的基本使用 golang中的interface本身是一种类型,它代表一个方法的集合。任何类型只要实现了接口中声明的所有方法,那么该类就实现了该接口。与其他语言不同,golang并不需要显式声明类型实现了某个接口,而是由编译器和runtime进行检查。接口解除了类型依赖, 有助于减少可视方法 阅读全文
posted @ 2019-11-18 16:24 滴巴戈 阅读(2167) 评论(0) 推荐(0)
摘要:1. map的使用 golang中的map是一种数据类型,将键与值绑定到一起,底层是用哈希表实现的,可以快速的通过键找到对应的值。 类型表示:map[keyType][valueType] key一定要是可比较的类型(可以理解为支持==的操作),value可以是任意类型。 初始化:map只能使用ma 阅读全文
posted @ 2019-11-15 14:59 滴巴戈 阅读(4013) 评论(0) 推荐(2)
摘要:1. 部分基本类型 go中的类型与c的相似,常用类型有一个特例:byte类型,即字节类型,长度为1,默认值是0; 1 bytes = [5]btye{'h', 'e', 'l', 'l', 'o'} 变量bytes的类型是[5]byte,一个由5个字节组成的数组。它的内存表示就是连起来的5个字节,就 阅读全文
posted @ 2019-11-13 17:43 滴巴戈 阅读(1584) 评论(0) 推荐(0)
摘要:1.map和set的应用和比较 map和set都是关联式容器,底层容器都是红黑树。 map以键值对的形式进行存储,方便进行查找,关键词起到索引的作用,值则表示与索引相关联的数据,以红黑树的结构实现,插入删除等操作都可以在O(log n)时间内完成。 所有元素都是键+值存在,key=value组成pa 阅读全文
posted @ 2019-11-12 16:20 滴巴戈 阅读(803) 评论(0) 推荐(0)