加载中
【Go专家编程】类型比较

Go语言类型比较研究的是各种类型变量在使用比较操作符(如==、!=)时的行为规则。 比较操作符分为等值操作符(==和!=)和排序操作符(<、<=、>和>=),等值操作符作用的操作数必须是可比较的...

《Go专家编程》Go 定时器内部实现原理剖析

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

Go string 实现原理剖析(你真的了解string吗)

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

《Go专家编程》Go testing.B数据结构源码剖析

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

《Go专家编程》Go testing.T数据结构源码剖析

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

《Go专家编程》Go testing.TB接口

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

《Go专家编程》Go 子测试使用说明

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

《Go专家编程》Go testing.common公共类源码剖析

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

GO itoa实现原理剖析

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

《Go专家编程》GO 读写锁实现原理剖析

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

《Go专家编程》GO 互斥锁实现原理剖析

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

Go defer实现原理剖析

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

《Go专家编程》Go range实现原理及性能优化剖析

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

Go slice实现原理剖析

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

Go select实现原理剖析

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

《Go专家编程》Go 并发控制context实现原理剖析

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

《Go专家编程》Go WaitGroup实现原理

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

《Go专家编程》Go goroutine调度

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

Go struct tag深入理解

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

《Go专家编程》Go 反射机制

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

没有更多内容

加载失败,请刷新页面

返回顶部
顶部