5 26

Golang中WaitGroup、Context、goroutine定时器及超时学习笔记

好久没有发过文章了 - -||,今天发一篇 golanggoroutine 相关的学习笔记吧,以示例为主。

WaitGroup

WaitGroupsync 包中,用于阻塞主线程执行直到添加的 goroutine 全部执行完毕。

Context

Context 是在 Go1.7 中移入标准库的。

Context 包不仅实现了在程序单元之间共享状态变量的方法,同时能通过简单的方法,使我们在被调用程序单元的外部,通过设置ctx变量值,将过期或撤销这些信号传递给被调用的程序单元。

goroutine的定时器及超时

这是两个有趣又实用的功能,在标准库 time 包里提供。

示例

源码

8 18

Golang学习笔记 - 标准库'net/http'的简析及自制简单路由框架

还是在继续学习Go的路上,曾经在使用PHP的时候吃过过度依赖框架的亏。现在学习Go的时候决定先打好基础,从标准库学起走。

源码分析

我们知道最简单的建立http服务器代码基本上都是这样的:

http.HandleFunc('/', func(w http.ResponseWriter, r *http.Request){
    fmt.Fprint(w, "Hello world")
})
http.ListenAndServe(":8080", nil)

这样就成功的建立了一个监听 8080 端口的http服务器,当访问的时候输出 Hello world

我们顺藤摸瓜来看看 HandleFunc 做了些什么事:

func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
    DefaultServeMux.HandleFunc(pattern, handler)
}
8 3

Go写的简单TCP聊天室示例

最近学习GO,写了一个聊天室来加深对 net 包和多线程的理解。

期间也遇到了一些小问题,比如 scan 如何读取一整行(包括空格)等。总的来说个人感觉 Go 还是一门很年轻的语言,资料、技巧上面还需要时间的积累。

不过,我已入坑…..

GitHub

GitHub地址

介绍

一个简单的基于GO语言的聊天室示例,参考了网上许多类似代码。代码有简单注释。

单执行文件,通过命令的方式选择启动服务端监听还是客户端连接。

功能:客户端昵称、服务端消息、服务端踢人命令。

以前的