1、ReentrantLock是一个类,synchronized是一个关键字,都是在JVM层面实现的互斥锁的方式。 2、功能方面ReentrantLock的功能要比synchrized更为全面,RenntrantLock能够支持公平锁和非公平锁,synchronized只能支持非公平锁、Reentr
压力测试 1.1.1. Go怎么写测试用例 开发程序其中很重要的一点是测试,我们如何保证代码的质量,如何保证每个函数是可运行,运行结果是正确的,又如何保证写出来的代码性能是好的,我们知道单元测试的重点在于发现程序设计或实现的逻辑错误,使问题及早暴露,便于问题的定位解决,而性能测试的重点在于发现程序设
单元测试 不写测试的开发不是好程序员。我个人非常崇尚TDD(Test Driven Development)的,然而可惜的是国内的程序员都不太关注测试这一部分。 这篇文章主要介绍下在Go语言中如何做单元测试和基准测试。 1.1. go test工具 Go语言中的测试依赖go test命令。编写测试代
异常处理 Golang 没有结构化异常,使用 panic 抛出错误,recover 捕获错误。 异常的使用场景简单描述:Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理。 panic: 1、内置函数 2、假如函数F中书写了panic语
延迟调用(defer) 1.1.1. Golang延迟调用: defer特性: 1. 关键字 defer 用于注册延迟调用。 2. 这些调用直到 return 前才被执。因此,可以用来做资源清理。 3. 多个defer语句,按先进后出的方式执行。 4. defer语句
闭包、递归 1.1.1. 闭包详解 闭包的应该都听过,但到底什么是闭包呢? 闭包是由函数及其相关引用环境组合而成的实体(即:闭包=函数+引用环境)。 “官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。 维基百科讲
匿名函数 1.1.1. 匿名函数 匿名函数是指不需要定义函数名的一种函数实现方式。1958年LISP首先采用匿名函数。 在Go里面,函数可以像普通变量一样被传递或使用,Go语言支持随时在代码里定义匿名函数。 匿名函数由一个不带函数名的函数声明和函数体组成。匿名函数的优越性在于可以直接使用函数内的变量
返回值 1.1.1. 函数返回值 "_"标识符,用来忽略函数的某个返回值 Go 的返回值可以被命名,并且就像在函数体开头声明的变量那样使用。 返回值的名称应当具有一定的意义,可以作为文档使用。 没有参数的 return 语句返回各个返回变量的当前值。这种用法被称作“裸”返回。 直接返回语句仅应当用在
参数 1.1.1. 函数参数 函数定义时指出,函数定义时有参数,该变量可称为函数的形参。形参就像定义在函数体内的局部变量。 但当调用函数,传递过来的变量就是函数的实参,函数可以通过两种方式来传递参数: 值传递:指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到
函数定义 1.1.1. golang函数特点: • 无需声明原型。 • 支持不定 变参。 • 支持多返回值。 • 支持命名返回参数。 • 支持匿名函数和闭包。 • 函数也是一种类型,一个函数可以赋值给变量。 • 不支持 嵌套 (nested
循环语句range Golang range类似迭代器操作,返回 (索引, 值) 或 (键, 值)。 for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下: for key, value := range oldMap { newMap[key]