Golang sync 相关使用 前言本文大概讲下 golang sync 包的相关用法。sync 用在较为底层的库的同步上面,别的情况是推荐使用 channel 来同步进程。 Mutexsync 包里面有两种互斥锁,分别是 sync.Mutex 和 sync.RWMutex。前者是基本的互斥锁,后者在前者的基础上实现的读写锁。 在这里我有一个简单的 stack 的实现,这里仅列出 push 方法的实现,可以看到,线程安全的的 s 2016-10-29 #golang #sync
Golang context 前言在去使用 Golang context 之前,推荐先去看 Golang pipeline 的博文,这里有讲到 Golang channel 的一些使用的技巧。 1.6 的版本只能通过 golang.org/x/net/context 来使用, 1.7 之后才可以通过直接引用来使用 应用场景Golang 创建了 goroutine 之后,在外部很难进行干预(只能依靠一个 chan 的关闭来通 2016-10-19 #golang #context
Golang 算术表达式解析 前言项目中需要用到解析算术表达式的模块,简单来说,就是 eval 函数,但并没有相应的标准库有类似的实现,所以想使用栈实现一个简单的算术表达式解析的模块。 首先,需要明确的是运算符优先级,这里只需要实现加减乘除,括号,and,or,不等号相关的符号即可。对应的优先级如下 括号 类型运算符(前缀 + -) 乘,除 加,减 大于,小于,不大于,不小于 不等于,等于 and or 程序需要做的就是把 2016-10-04 #golang #eval
Golang reflect 性能测试 前言这阵子用 Golang 实现了一个类似于 python in 语法的小函数,项目 gox 的 benchmark 测试的结果如下 12345BenchmarkOriIn-4 500000000 3.22 ns/opBenchmarkMyIn-4 10000000 175 ns/opBenchmarkOriM 2016-08-07 #golang #reflect
Docker 简要记录 安装docker 目前在 ubuntu apt 上面的版本官方并不维护,需要手动添加它的源才比较好。详细的官方文档可见 这里。 因为国外的 docker registry 太慢,所以可以选择国内的服务 daocloud 来进行加速。常用的镜像都能很快的下载。当然有能力的可以选择自己搭建私有的 registry。 安装之后可以看 docker 是否已经启动 1sudo systemctl statu 2016-07-16 #docker
Golang 学习 4 前面 1 ~ 3 系列是看着书来写的,后面的是自己遇到的一些问题的总结。 类型转换Golang 是强类型语言,类型的转换必须显式转换,interface 除外。 数值类型的转换,哪怕是底层类型相同的 int 和 int32 也不能直接赋值。同理,自定义的类型哪怕底层类型相同也不能直接赋值。 12345678910type MyInt intfunc main() { var i i 2016-07-09 #golang
Golang 学习 3 包管理Golang 中的包 package 是代码组织的基本单位。与 struct 的方法相同,大写字母开头的就是该包对外可以访问的方法,变量。 每个文件开头的 package 关键字用来标识该文件所在的包名,通常就是包含该文件的文件目录名。 当导入包遇到重名的时候,可以像下面的代码一样 1234import ( "crypto/rand" mrand " 2016-07-04 #golang
Golang 学习 2 struct用于聚合数据的结构体,简单用法如下 123456789101112131415161718type Employee struct { ID int Name string Address string DoB time.Time Position string Salary int M 2016-06-25 #golang
Golang 学习 1 字符串不可变的字节序列。对于不同编码的字符串所有都是同样的操作,字符串的每一位都是一个 ASCII 值,需要额外进处理去解析 unicode 字符串。 1234567891011121314import "unicode/utf8"s := "Hello, 世界"for i := 0; i < len(s); { r, size := 2016-06-07 #golang
Golang 开发配置 @ ubuntu 16.04 LTS 环境ubuntu 16.04 的源的 Golang 的版本是 1.6+ 的,不用像 14.04 那样需要自己手动去更新版本。 在 $HOME/.zshrc 上配置该变量 12export GOPATH=/home/lycheng/projects/goexport PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin: 2016-05-29 #golang #ubuntu