SF
养育土豆
养育土豆
注册登录
关注博客
注册登录
主页
关于
RSS
Go 快速入门指南 - 互斥锁
洋芋土豆
2022-12-25
阅读 2 分钟
867
关键字 Mutex 表示互斥锁类型,它的 Lock 方法用于获取锁,Unlock 方法用于释放锁。在 Lock 和 Unlock 之间的代码,可以读取和修改共享资源,这部分区域称为 临界区。
Go 快速入门指南 - select
洋芋土豆
2022-12-25
阅读 4 分钟
964
select 类似 switch, 包含一系列逻辑分支和一个可选的默认分支。每一个分支对应通道上的一次操作 (发送或接收),可以将 select 理解为专门针对通道操作的 switch 语句。
Go 快速入门指南 - waitgroup
洋芋土豆
2022-12-24
阅读 2 分钟
759
在 goroutine 小节中,为了让并发的 3 个 goroutine 正常执行完成,调用 time.Sleep() 睡眠等待。这样的方式存除了实现不优雅之外,最大的问题在于: time.Sleep() 接受的是一个硬编码的时间参数,这就要求我们实现必须知道每个goroutine 的执行时间并且要以执行时间最长的 goroutine 为基准,这在大多数场景下是没办法做...
Go 快速入门指南 - 遍历通道
洋芋土豆
2022-12-24
阅读 3 分钟
751
概述建议先阅读 range, 非缓冲通道, 缓冲通道。range 除了可以遍历字符串、切片、数组等数据结构外,还可以遍历通道。语法规则和遍历其他数据结构不同,遍历通道时没有 索引 的概念,只有值,语法如下: {代码...} 使用规则遍历一个空的通道 (值为 nil) 时,阻塞遍历一个阻塞 && 未关闭的通道时,阻塞遍历一个阻塞 && 已...
Go 快速入门指南 - 检测通道是否关闭
洋芋土豆
2022-12-24
阅读 2 分钟
1.1k
概述建议先阅读 非缓冲通道, 缓冲通道, 关闭通道,通道方向。Go 语言没有提供函数或方法判断一个通道是否关闭。因此只能使用一个变通的办法:接收通道元素,根据返回的布尔值确定通道是否关闭。例子双向通道检测 {代码...} 单向 (只读) 通道检测 {代码...} 单向 (只写) 通道检测对于只写通道,需要采用一个折中的办法:尝...
Go 快速入门指南 - 通道方向
洋芋土豆
2022-12-24
阅读 1 分钟
848
概述通道的方向分为 发送 和 接收。默认情况下,通道是双向的 (同时发送和接收),但是可以通过标识符指明通道为单向 (只读或只写)。语法规则可读写通道 (同时支持发送和接收) {代码...} 只读通道 (只支持接收) {代码...} 只写通道 (只支持发送) {代码...} 类型转换双向通道可以转换为单向通道,但是单向通道无法转换为双...
Go 快速入门指南 - 关闭通道
洋芋土豆
2022-12-24
阅读 1 分钟
841
概述建议先阅读 阻塞通道 和 非阻塞通道 小节。在前面的两个小节中, 为了最小化代码达到演示效果,省略了 关闭通道 的步骤,正确的做法应该是在通道使用完成后关闭。使用规则通过关键字 clsoe 关闭通道。关闭一个空的通道 (值为 nil) 时,panic关闭一个非空 && 已关闭的通道时,panic关闭一个非空 && 未关闭的通道时,...
Go 快速入门指南 - 缓存通道
洋芋土豆
2022-12-24
阅读 1 分钟
790
通过关键字 chan + 数据类型 来表明通道数据类型,调用 make() 函数来初始化一个通道。make() 函数的第二个参数为通道长度,如果未指定或指定为 0,则该通道为非缓冲通道 (阻塞通道),否则该通道为缓冲通道 (非阻塞通道)。
Go 快速入门指南 - 非缓冲通道
洋芋土豆
2022-12-24
阅读 2 分钟
833
goroutine 是 Go 程序并发执行的实体,channel (通道) 则是它们之间的连接,用于多个 goroutine 之间互相通信。通道可以让一个 goroutine 发送特定类型值到另一个 goroutine,每一个通道可以发送数据类型称为通道的 元素类型。
Go 快速入门指南 - goroutine
洋芋土豆
2022-12-24
阅读 2 分钟
695
当一个程序启动时,只有一个 goroutine 调用 main 函数,称为 主 goroutine, 当 main 函数返回时,所有 goroutine 都会被终止 (不论其是否运行完成),然后程序退出。
Go 快速入门指南 - 类型比较
洋芋土豆
2022-12-24
阅读 4 分钟
705
Go 中有 3 种数据类型不能比较,分别是 slice, map, func,如果要比较这 3 种类型,使用 reflect.DeepEqual 函数。
Go 快速入门指南 - 零值
洋芋土豆
2022-12-24
阅读 1 分钟
672
概述当一个变量使用 var 进行声明后并未进行初始化 (变量后面没有赋值符 =) 操作,会默认分配一个零值 (zero value)。不同类型对应的零值类型零值boolfalseint0float0string""byte (uint8)0pointernilfuncnilinterfacenilslicenilchannelnilmapnil例子bool 类型 {代码...} byte 类型 {代码...} func 类型 {代码...} chan...
Go 快速入门指南 - 错误
洋芋土豆
2022-12-24
阅读 2 分钟
550
概述建议先阅读 函数 和 接口 小节。例子errors.New() 创建错误 {代码...} fmt.Errorf() 创建错误不同于 errors.New(), fmt.Errorf() 在构建错误时,可以进行格式化。 {代码...} 最佳实践永远不要忽略错误,否则可能会导致程序崩溃!联系我
Go 快速入门指南 - 判断是否实现接口
洋芋土豆
2022-12-24
阅读 2 分钟
670
概述Go 里面没有 implements 关键字来判断一个结构体 (对象) 是否实现了某个接口, 要实现类似的功能,需要用到 类型断言。类型断言 {代码...} 例子判断是否实现接口 {代码...} 联系我
Go 快速入门指南 - 实现系统错误接口
洋芋土豆
2022-12-24
阅读 1 分钟
806
概述标准库 error 数据类型本质上就是一个接口,原型如下: {代码...} 例子实现 error 接口 {代码...} 联系我
Go 快速入门指南 - 接口
洋芋土豆
2022-12-23
阅读 2 分钟
992
Go 接口是隐式实现。 对于一个数据类型,无需声明它实现了哪些接口,只需要实现接口必需的方法即可。当然了,存在一个小问题就是: 我们可能无意间实现了某个接口:) ,所以 命名 是多么重要的一件事情。
Go 快速入门指南 - 方法
洋芋土豆
2022-12-23
阅读 2 分钟
895
方法的声明和普通函数的声明类似,只是在函数名字前面多了一个 接收者参数 (接收者参数将方法绑定到其对应的数据类型上)。方法可以绑定到任何数据类型上,但是大多数情况下,绑定的都是 结构体。
Go 快速入门指南 - 嵌套结构体
洋芋土豆
2022-12-23
阅读 4 分钟
1k
概述Go 支持将多个结构体通过嵌套的方式,组成一个大的结构体,降低了单个结构体复杂度,同时提高了结构体之间组合的灵活性。例子为了省略篇幅,本小节只使用 字面量 方式初始化,new() 的初始化方式请参照 结构体 小节。每个结构体单独初始化,最后组装 {代码...} 整个结构体初始化 {代码...} 打印结构体 {代码...} 扩...
Go 快速入门指南 - 结构体
洋芋土豆
2022-12-23
阅读 2 分钟
855
概述结构体 是将零个或多个字段 (变量) 组合在一起的复合数据类型,类似于面向对象语言中的 对象。结构体以及其字段都使用 可见性 规则。语法规则 {代码...} 例子空结构体 {代码...} 没有长度,也不携带任何字段信息。声明及初始化 {代码...} 结构体指针和指针变量一样,在结构体中,也可以通过 结构体 指针直接修改结构...
Go 快速入门指南 - recover
洋芋土豆
2022-12-23
阅读 1 分钟
924
**recover 和 defer 必须配套使用, 如果 recover 在其他地方执行会返回 nil,不会产生任何效果。defer 必须在 panic 之前声明,否则 panic 会直接终止程序。**
Go 快速入门指南 - defer
洋芋土豆
2022-12-23
阅读 2 分钟
1k
一个 defer 语句就是一个普通的函数或方法调用。 defer 语句保证了不论是在正常情况下 (return 返回),还是非正常情况下 (发生错误, 程序终止),函数或方法都能够执行。
Go 快速入门指南 - panic
洋芋土豆
2022-12-23
阅读 1 分钟
910
概述panic 会终止程序并退出,因此只有在发生严重的错误时才会使用 panic。例子主动触发 {代码...} 除 0 {代码...} 联系我
Go 快速入门指南 - 内部函数
洋芋土豆
2022-12-23
阅读 1 分钟
918
概述使用的场景:在函数内部有很多重复性代码并且严重依赖上下文变量。此时可以在函数内部声明一个函数,专门用来处理重复性的代码。例子内部求和函数 {代码...} 联系我
Go 快速入门指南 - 递归
洋芋土豆
2022-12-23
阅读 1 分钟
873
概述经典语录: 要想理解递归,首先要理解递归。递归的概念参考 递归 - 维基百科。例子阶乘 {代码...} 联系我
Go 快速入门指南 - 闭包
洋芋土豆
2022-12-23
阅读 1 分钟
819
概述闭包的概念参考 闭包 - 维基百科)。例子自增序列号生成器 {代码...} 联系我
Go 快速入门指南 - 指针参数
洋芋土豆
2022-12-23
阅读 2 分钟
1.1k
在 切片 小节中讲到,切片的底层引用了一个数组,可以简单地理解为:切片本身是一个指针,指向底层数组的元素,所以常用的方式的是将函数参数定义为切片类型。
Go 快速入门指南 - 变长参数
洋芋土豆
2022-12-23
阅读 2 分钟
723
在函数的最后一个参数的数据类型之前加上省略号 ... ,表示该参数的数据类型是 变长类型,调用该函数时可以传递任意数量 ( 0 - N ) 的该类型的参数。
Go 快速入门指南 - 函数
洋芋土豆
2022-12-23
阅读 2 分钟
877
概述函数 是将一个或者一类问题包装为一个代码块,可以被多次调用,提高代码重用性。Go 函数中声明、定义、参数、返回值这些基础概念,和其他编程语言中的一致,这里不再赘述。语法规则Go 函数支持单个返回值和多个返回值。 {代码...} 例子单个返回值 {代码...} 多个返回值,不指定名称 {代码...} 多个返回值,指定名称 ...
Go 快速入门指南 - make 和 new
洋芋土豆
2022-12-23
阅读 2 分钟
762
概述new() 函数为数据类型 T 分配一块内存,初始化为类型 T 的零值,返回类型为指向数据的指针,可以用于所有数据类型。make() 函数除了为数据类型 T 分配内存外,还可以指定长度和容量,返回类型为数据的初始化结构,只限于 切片, Map, 通道。make什么时候用声明并初始化 切片, Map, 通道(后面会讲到)。为什么定义为什...
Go 快速入门指南 - 有序 Map
洋芋土豆
2022-12-23
阅读 2 分钟
824
Map 的遍历是无序的,这意味着不能依赖遍历的键值顺序。如果想实现 Map 遍历时顺序永远一致,一个折中的方案时预先给 Map 的 键 排序,然后根据排序后的键序列遍历 Map, 这样可以保证每次遍历顺序都是一样的。
1
2
(current)
3
下一页
上一页
2
(current)
下一页