随笔分类 -  golang

摘要:一. 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法。以大堆为例利用堆顶记录的是最大关键字这一特性,每一轮取堆顶元素放入有序区,就类似选择排序每一轮选择一个最大值放入有序区,可以把堆排序看成是选择排序的改进。它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下 阅读全文
posted @ 2021-09-16 11:00 滴巴戈 阅读(1788) 评论(0) 推荐(0)
摘要:go GC 的基本特征是非分代、非紧缩、写屏障、并发标记清理。核心是抑制堆增长,充分利用CPU资源。 1. 三色标记 是指并发(垃圾回收和用户逻辑并发执行)的对系统中的对象进行颜色标记,然后根据颜色将对象进行清理。基本原理: 起初将堆上所有对象都标记为白色; 从底部开始遍历对象,将遍历到的白色对象标 阅读全文
posted @ 2019-12-29 13:30 滴巴戈 阅读(1433) 评论(0) 推荐(1)
摘要:Go语言内置运行时(就是runtime),不同于传统的内存分配方式,go为自主管理,最开始是基于tcmalloc架构,后面逐步迭新。自主管理可实现更好的内存使用模式,如内存池、预分配等,从而避免了系统调用所带来的性能问题。 1. 基本策略 每次从操作系统申请一大块内存,然后将其按特定大小分成小块,构 阅读全文
posted @ 2019-12-27 13:32 滴巴戈 阅读(4330) 评论(0) 推荐(4)
摘要:1. 什么是反射 Golang提供了一种机制,在编译时不知道类型的情况下,可更新变量、运行时查看值、调用方法以及直接对他们的布局进行操作的机制,称为反射。 2. 反射的使用 2.1 获取变量内部信息 reflect提供了两种类型来进行访问接口变量的内容: 类型reflect.ValueOf() 的作 阅读全文
posted @ 2019-12-19 15:32 滴巴戈 阅读(713) 评论(0) 推荐(0)
摘要: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 滴巴戈 阅读(967) 评论(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 滴巴戈 阅读(4134) 评论(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 滴巴戈 阅读(2240) 评论(0) 推荐(1)
摘要:1. select的使用 定义:在golang里头select的功能与epoll(nginx)/poll/select的功能类似,都是坚挺IO操作,当IO操作发生的时候,触发相应的动作。 1.1 一些使用规范 在Go的语言规范中,select中的case的执行顺序是随机的,当有多个case都可以运行 阅读全文
posted @ 2019-11-20 17:03 滴巴戈 阅读(1888) 评论(0) 推荐(0)
摘要:1. channel的使用 channel,通道。golang中用于数据传递的一种数据结构。是golang中一种传递数据的方式,也可用作事件通知。 1.1 声明、传值、关闭 使用chan关键字声明一个通道,在使用前必须先创建,操作符 <- 用于指定通道的方向,发送或接收。如果未指定方向,则为双向通道 阅读全文
posted @ 2019-11-20 09:31 滴巴戈 阅读(4656) 评论(0) 推荐(1)
摘要:1. 接口的基本使用 golang中的interface本身是一种类型,它代表一个方法的集合。任何类型只要实现了接口中声明的所有方法,那么该类就实现了该接口。与其他语言不同,golang并不需要显式声明类型实现了某个接口,而是由编译器和runtime进行检查。接口解除了类型依赖, 有助于减少可视方法 阅读全文
posted @ 2019-11-18 16:24 滴巴戈 阅读(2164) 评论(0) 推荐(0)
摘要:1. map的使用 golang中的map是一种数据类型,将键与值绑定到一起,底层是用哈希表实现的,可以快速的通过键找到对应的值。 类型表示:map[keyType][valueType] key一定要是可比较的类型(可以理解为支持==的操作),value可以是任意类型。 初始化:map只能使用ma 阅读全文
posted @ 2019-11-15 14:59 滴巴戈 阅读(4010) 评论(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 滴巴戈 阅读(1581) 评论(0) 推荐(0)