这两天用Go写了第一个项目,还在demo阶段,后续会持续记录关于Go开发的一些坑点。
项目叫做bigpipe,是为了解决服务之间异步Http调用而生的,用Go实现起来非常的简单,并发能力也很不错。
我为项目做了一个简单的分享PPT供下载。
项目地址:https://github.com/owenliang/bigpipe,编辑器一定要用Gogland,错误提示太强大,很难写出错误的代码!
目前有几个心得记录一下:
- 配置文件我用的json,因为go是强类型,所以解析json异常痛苦,但是开源库我也不放心,所以就用标准库json慢慢搞。
- 一个目录下的go文件属于一个包,包就是目录的名字,包内互相调用不需要import了。
- 管道是引用的,不需要指针。
- 格式化字符串时,传string*和string是不一样的,前者会打印出指针,后者才是值。
- log库我自己写的,用channel传输保证并发安全,单个goroutine顺序写文件。
- context库是比较冷门但又必须用到的东西,可以特别看看。
- http库很强大,无论是服务端还是客户端,都是异步的,并发的。
- go自带的go get包管理太难用,不会自动下载依赖,也没有版本的概念,必须用第三方的包管理工具。
- GOROOT指向go的安装目录,GOPATH指向项目目录(它在目录的src目录下找代码),它俩都是import时候用来寻找代码用的。
- 程序入口随便放在哪里,但是一定要定义为package main包。
- 分析go程序性能可以用pprof,它能直接画出调用图并在浏览器里查看。
- go程序在启动后需要根据runtime包指定线程数量,否则不一定能用到所有的Cpu core。
- 擅用interface抽象接口,以便依赖抽象而不是依赖实现,这和C/C++/JAVA的抽象原理一致,只是表现形式太特别,还不太习惯。
后续会继续完善项目,随便记录一些GO的心得。