用Golang实现基于kafka中间件

这两天用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的心得。

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~