goroutine调度
Go 使用称为 goroutine 的用户级线程,它比内核级线程更轻且更便宜。 例如,创建一个初始 goroutine 将占用 2KB 的堆栈大小,而内核级线程将占用 8KB 的堆栈大小。 还有,goroutine 比内...
继续阅读go defer运行机制
概念Go语言的defer会在当前函数返回前执行传入的函数,它会经常被用于关闭文件描述符、关闭数据库连接以及解锁资源。现象defer先进后出packagemainimport"fmt"f defer闭包,预...
继续阅读go context上下文
1、context的解释在API之间或者方法调用之间,传递的除了业务参数之外的其他信息,比如traceId等。比如,服务端接收到客户端的HTTP请求之后,可以把客户端的IP地址和端口、客户端的身份信息 go,contex...
继续阅读goroutine&waitgroup下载文件
当我们下载一个大文件的时候,会因为下载时间太久而超时或者出错。那么我么我们可以利用goroutine的特性并发分段的去请求下载资源。1、Accept-Ranges首先下载链接需要在响应中返回Accep goroutine...
继续阅读golang中的几种并发模式
1、for-select模式这种模式通常用在从多个通道读取数据packagemainimport("fmt""time")funcmain(){ch1,ch2:=mak channel,s...
继续阅读golang中经常会犯的一些错误
1、未知的枚举值我们现在定义一个类型是unit32的Status,他可以作为枚举类型,我们定义了3种状态typeStatusuint32const(StatusOpenStatus=iotaStatu go,golang...
继续阅读golang中的锁竞争问题
* 更新课件时长的时候上锁,避免出现数据竞争 * 判断如果时长小于60秒的话,就报错。但是注意这里fmt.Errorf打印结构c会调用String()方法 * 我们看String方法里面,又使用了读锁,避免读取的时候数据...
继续阅读