Go开发
文章平均质量分 72
NNnora
为了大傻子每日一更
展开
-
golang善用go func和defer
一、error与panic:error:可预见的错误panic:不可预见的错误,panic一般通过defer中的recover()捕获对于有风险的代码,若发生panic则会导致程序异常退出,例如数组越界。1. panic的操守panic是有秩序的,退出之前会执行完先处理完当前goroutine已经defer【挂上去】的任务,若某个defer在panic之后,则不会被执行。pani...原创 2020-01-17 14:52:08 · 12651 阅读 · 0 评论 -
fasthttp client解析--Golang更快的http组件
流程解析:1. test中调用Get方法2. 调用clientGetURL方法3. 首先调用AcquireRequest()方法得到一个复用的request1. 从requestPool中任意选择一个空的request,若该request不再需要可以将其传给releaseRequest,这将会将request回收,减少GC压力。2. 对pool操作要加锁。3. 若pool中没有request,那么...原创 2018-07-10 11:18:49 · 5453 阅读 · 0 评论 -
Go入门之——Go开发环境配置
一.配置Go开发环境1. 到这个网站https://studygolang.com/dl下载对应的安装包,msi包表示安装后不需要配置环境变量,会自动配置2. 安装位置为默认即可。3. 查看环境变量已经自动更改。4. 检查是否成功:命令行输入go verison,若出现go版本号,成功。5. 修改一下GOPATH,指向代码目录,类似于eclipse的workspace。6. go env可以看到g...原创 2018-07-06 09:54:32 · 6996 阅读 · 0 评论 -
第一个Go项目
一、新建项目1. 新建一个项目在配置的GOPATH下2. 新建以下三个文件夹src pkg, bin,在src下新建main文件夹,其中写代码3. 为项目建立一个独有的GOPATH,重要,否则第5步会因找不到PATH下的Package而出错4. 编辑配置文件5. 左上角点击+,选择Go BuildRun kind选Package,选择运行文件的包Output directory填写你自己项目bin...原创 2018-07-06 10:03:13 · 3172 阅读 · 0 评论 -
Golang之net/http包的httpClient与Transport源码详解
一、net/http的httpclient发起http请求方法第二步:Do/Get/Post方法的实现(以Do为例)第三步:精髓:调用transport的RoundTrip方法struct:RoundTrip方法:第一步:获取TCP长连接pconn, err := t.getConn(req, cm)第二步:调用这个持久连接persistConn 这个struct的roundTr...原创 2018-07-06 10:06:35 · 10327 阅读 · 0 评论 -
goroutine与协程
一、线程与协程的区别1. 调度上的区别1. 进程线程都是由操作系统进行调度, 有CPU时间片的概念,进行抢占式调度2. 协程是用户态的轻量级线程,对内核透明,所以协程的调度与切换完全由用户控制3. 正因为协程不由操作系统调度,才有:线程是操作系统调度的最小单位。2. 切换开销的区别线程太重,资源占用太高,频繁创建销毁会带来严重的性能问题;协程切换远比线程小3. 协程的好处:一个协程几乎就是一个普通...原创 2018-07-06 18:06:43 · 2474 阅读 · 0 评论 -
Golang之消息机制channel
1. 背景:1. 对于以下这段代码:按照想法应该输出0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9但是,输出结果是:0 1 2 3 4 5 6 7 8 92. 原因:在goroutine还未来得及跑loop函数时,主函数main已经退出。解决主函数退出太快最直接的方法是让主函数睡眠一段时间:这次输出结果确实是两趟。可是等待的办法并不好,因为并不知goroutine要...原创 2018-07-06 18:15:49 · 1720 阅读 · 0 评论 -
解决Go上传文件报错:找不到Boundary的问题
最近要做一个组件,即接收客户端的请求,经过一系列的封装,将请求发送给真正的服务端器。可以理解为:客户端使用Http的Request的Body存储文件流,将Request发送给服务器。遇到一个问题:传入的是一个文件句柄File,需要转换成byte[]存到request的body中,但是发现boundary找不到,自行在content-Type中加上Boundary字段,发现后台读取不到文件流。1...原创 2018-08-03 12:07:27 · 8908 阅读 · 0 评论