随笔分类 - go语言学习
摘要:主协程如何等其余协程完再操作 主协程自我阻塞,直到需要的协程完成 阻塞方法 使用sync.WaitGroup()管理其余协程 优点:操作简单 缺点:不能管控协程的执行完成的顺序 利用缓存管道进行协程之间的通信 优点:能够管控一组协程结束 缺点:不能管控协程的执行完成顺序 利用无缓存管道进行协程之间的
阅读全文
摘要:TCP连接示意图 长连接和短链接的区别 客户端和服务端响应的次数 长连接:可以多次。 短链接:一次。 传输数据的方式 长连接:连接 数据传输 保持连接 短连接:连接 数据传输 关闭连接 长连接和短链接的优缺点 长连接 优点 省去较多的TCP建立和关闭的操作,从而节约时间。 性能比较好。(因为客户端一
阅读全文
摘要:golang的server push server push作用的理解 客户端和服务端建立连接之后,服务器主动将一些资源推送给服务端。 注意:推送的内容,要放在发送响应数据之前。 server push示意图 server push特点 理论上,缩短数据加载的时间 将请求数据存放在缓存中 serve
阅读全文
摘要:context学习 context的struct设计 go type Context interface { Deadline() (deadline time.Time, ok bool) Done()
阅读全文
摘要:空结构体的特点和作用 参考代码 go package main import ( "fmt" "unsafe" ) func main() { empStruct() } //空结构体的实例和作用 func empStruct(){ //空结构体的特点:1、不占用内存;2、地址不变 var s st
阅读全文
摘要:time包中Parse和Format的区别 参考代码 输出结果 总结:两者的区别:Format表示将时间转化为字符串,parse表示将字符串转化为时间
阅读全文
摘要:参考代码 go func main(){ // 错误写法 // ch1 := make(chan string) // ch1
阅读全文
摘要:defer func(参数){} 参考代码 输出结果 结果分析 defer运行特点 在return之后执行 先赋值后放入堆栈
阅读全文
摘要:循环开协程情况分析 代码 现象说明 a的值为什么会是一样? 第一个go func中a是外部变量,因为协程运行时间不确定性,可能此时for循环完之后,才创建完协程,而此时得a=10,协程操作的也是这个变量。因此值会是一样的。 b的值为什么会不一样? 第二个go func中 是函数参数,与外部for中的
阅读全文
摘要:for range 经典问题 问题 输出结果 个人理解(要是理解的不对,请指出,谢谢) 在该for循环中,range驱动数组内部初始指针走动,每次遍历数组的时候,数组内初始指针都会向下移动。循环结束之后,range使得数组内部的初始指针指向最后一个元素。根据指针的特性,赋给data的value值都是
阅读全文
摘要:Visual Studio Code Go插件配置选项 go get命令和go install命令的区别 go get 命令的作用 从远程下载需要用到的包 下载完之后,执行go install go install 命令的作用 生成可执行文件后,放在%GOPATH%/bin目录下 需要下载的插件 直
阅读全文
摘要:golang panic的错误回收和简单的使用场景 代码示例 注意:deferPanic返回值的设计。返回值里面有声明变量了,这就相当与deferPanic中的一个变量,并且deferPanic返回值为变量的值。 原因:减少在函数中定义变量的代码 return、panic、defer的执行顺序 pa
阅读全文
摘要:defer 被调用时机 代码测试 运行效果 总结 defer是在return之后执行的 对于defer中有名返回值和无名返回值的区别,有兴趣的可以看(引用) "Go语言学习——彻底弄懂return和defer的微妙关系"
阅读全文
摘要:golang中创建logger时候踩过的坑 错误的代码 出现的错误 在main函数里面logger.Println()不能打印到控制台,也不能写入文件 错误原因
阅读全文
摘要:功能 根据静态服务器上基础的url,获取所有的文件 运用到的知识点 日志处理 能在控制台打印,又能写入文件 向服务端发送get请求 http.Get(url) 递归获取文件夹和创建文件夹
阅读全文
摘要:package main import( "encoding/json" "fmt" "io/ioutil" "net/http" ) func main(){ fmt.Println("将自己的电脑转化为服务端") // http.Handle("/",http.FileServer()) htt
阅读全文
摘要:1、打开文件 2、实例阅读者 3、以‘\n'结束获取一行内容
阅读全文
摘要:// select在go语言协程里面是有阻塞select后面继续运行的代码作用,但是当select的case获取到数据之后,协程里面的代码是不会停止的,他还是会继续运行的package main import( "fmt" "time" ) func main(){ fmt.Println("超时设置") var ch chan string go func() { time....
阅读全文
摘要:在处理超时时候出现的问题: 问题代码为 错误的原因:var ch chan string没有对ch分配空间,使得一直运行的是case <- time.After(time.Second*5)这个分支。解决方法为添加:ch = make(chan string)或者删除var ch chan stri
阅读全文
摘要:package main import( "text/template" "bytes" "fmt" "reflect" ) func main(){ name := "reyi" var tmp1 *template.Template tmp1 =template.New("test") //创建
阅读全文