加载中
Go 定时器内部实现原理剖析

前言 前面我们介绍了一次性定时器Timer和周期性定时器Ticker,这两种定时器内部实现机制相同。创建定时器的协程并不负责计时,而是把任务交给系统协程,系统协程统一处理所有的定时器。 本节...

Go
2019/04/22 21:15
856
Go string 实现原理剖析(你真的了解string吗)

string标准概念 Go标准库builtin给出了所有内置类型的定义。 源代码位于src/builtin/builtin.go,其中关于string的描述如下: // string is the set of all strings of 8-bit bytes, convent...

Go
2019/03/08 17:09
1.9K
Go testing.B数据结构源码剖析

简介 跟据前面章节,我们可以快速的写出一个性能测试并执行,最令我感到神奇的是b.N的值,虽然官方资料中说b.N会自动调整以保证可靠的计时,可还是想了解具体的实现机制。 本节,我们先分析t...

Go
2019/02/21 14:22
136
Go testing.T数据结构源码剖析

简介 在了解过testing.common后,我们进一步了解testing.T数据结构,以便了解更多单元测试执行的更多细节。 数据结构 源码包src/testing/testing.go:T定义了其数据结构: type T struct { co...

2019/02/20 11:37
111
Go testing.TB接口

简介 TB接口,顾名思义,是testing.T(单元测试)和testing.B(性能测试)共用的接口。 TB接口通过在接口中定义一个名为private()的私有方法,保证了即使用户实现了类似的接口,也不会跟testing...

Go
2019/02/18 19:06
95
Go 子测试使用说明

简介 简单的说,子测试提供一种在一个测试函数中执行多个测试的能力,比如原来有TestA、TestB和TestC三个测试函数,每个测试函数执行开始都需要做些相同的初始化工作,那么可以利用子测试将这...

Go
2019/02/12 11:40
148
Go testing.common公共类源码剖析

简介 我们知道单元测试函数需要传递一个testing.T类型的参数,而性能测试函数需要传递一个testing.B类型的参数,该参数可用于控制测试的流程,比如标记测试失败等。 testing.T和testing.B属于...

GO itoa实现原理剖析

前言 我们知道iota常用于const表达式中,我们还知道其值是从零开始,const声明块中每增加一行iota值自增1。 使用iota可以简化常量定义,但其规则必须要牢牢掌握,否则在我们阅读别人源码时可...

Go
2018/11/22 11:14
2.3K
GO 读写锁实现原理剖析

前言 前面我们聊了互斥锁Mutex,所谓读写锁RWMutex,完整的表述应该是读写互斥锁,可以说是Mutex的一个改进版,在某些场景下可以发挥更加灵活的控制能力,比如:读取数据频率远远大于写数据频...

Go
2018/11/19 17:31
1.7K
GO 互斥锁实现原理剖析

前言 互斥锁是并发程序中对共享资源进行访问控制的主要手段,对此Go语言提供了非常简单易用的Mutex,Mutex为一结构体类型,对外暴露两个方法Lock()和Unlock()分别用于加锁和解锁。 Mutex使用...

Go
2018/11/14 17:32
4.1K
Go defer实现原理剖析

前言 defer语句用于延迟函数的调用,每次defer都会把一个函数压入栈中,函数返回前再把延迟的函数取出并执行。 为了方便描述,我们把创建defer的函数称为主函数,defer语句后面的函数称为延迟...

Go
2018/11/05 16:50
1.8K
Go range实现原理及性能优化剖析

前言 range是Golang提供的一种迭代遍历手段,可操作的类型有数组、切片、Map、channel等,实际使用频率非常高。 探索range的实现机制是很有意思的事情,这可能会改变你使用range的习惯。 2....

Go
2018/11/01 16:06
3.2K
Go slice实现原理剖析

前言 Slice又称动态数组,依托数组实现,可以方便的进行扩容、传递等,实际使用中比数组更灵活。 正因为灵活,如果不了解其内部实现机制,有可能遭遇莫名的异常现象。Slice的实现原理很简单,...

Go
2018/10/30 20:06
1.6K
Go select实现原理剖析

前言 select是Golang在语言层面提供的多路IO复用的机制,其可以检测多个channel是否ready(即是否可读或可写),使用起来非常方便。 本章试图根据源码总结其实现原理,从而发现一些使用误区或解...

Go
2018/10/29 12:10
5.2K
Go 并发控制context实现原理剖析

前言 Golang context是Golang应用开发常用的并发控制技术,它与WaitGroup最大的不同点是context对于派生goroutine有更强的控制力,它可以控制多级的goroutine。 context翻译成中文是"上下文"...

2018/10/19 18:35
2.4K
Go WaitGroup实现原理

1 前言 WaitGroup是Golang应用开发过程中经常使用的并发控制技术。 WaitGroup,可理解为Wait-Goroutine-Group,即等待一组goroutine结束。比如某个goroutine需要等待其他几个goroutine全部完...

Go goroutine调度

前言 Goroutine调度是一个很复杂的机制,尽管Go源码中提供了大量的注释,但对其原理没有一个好的理解的情况下去读源码收获不会很大。下面尝试用简单的语言描述一下Goroutine调度机制,在此基...

Go
2018/09/29 12:25
1.3K
Go struct tag深入理解

前言 Go的struct声明允许字段附带Tag来对字段做一些标记。 该Tag不仅仅是一个字符串那么简单,因为其主要用于反射场景,reflect包中提供了操作Tag的方法,所以Tag写法也要遵循一定的规则。 ...

2018/09/10 11:23
1.5K
Go 反射机制

前言 个人觉得,反射讲得最透彻的还是官方博客。官方博客略显晦涩,多读几遍就慢慢理解了。 本文既是学习笔记,也是总结。 官方博客地址:https://blog.golang.org/laws-of-reflection 2. 反...

Go
2018/09/03 19:03
448
装修助手支持

占位

2014/12/18 23:11
310

没有更多内容

加载失败,请刷新页面

返回顶部
顶部