老甘可读区

id:cngump, 像阿甘, 技术控 。。

初试gRPC

https://github.com/grpc/grpc 是google新推出的一个RPC框架,性能应该不错的。
使用HTTP2,ProtoBuffer技术,支持各种主流语言。

安装ProtoBuffer

gRPC使用了ProtoBuffer作为IDL,由于OSX下面的brew支持的是ProtoBuffer 2.x,所有无法使用。要手动编译ProtoBuffer, Linux用户可以略过此步骤

1
2
3
4
git clone https://github.com/google/protobuf
cd protobuf
make && make install
protoc --version  #确认protobuf是不是3.x

安装protoc的go语言插件:

1
go get -a github.com/golang/protobuf/protoc-gen-go

编译.proto文件

1
protoc -I ../protos ../protos/helloworld.proto --go_out=plugins=grpc:helloworld

初试gRPC

请先安装Go 1.4以上版本。 可以参考 http://cngump.com/blog/2015/03/22/golang-compile-and-env/

安装gRPC
1
go get google.golang.org/grpc

运行gRPC样例,在下面目录中有grpc自带的route_guide的example

1
2
3
cd $GOPATH/src/google.golang.org/grpc/examples/route_guide
go run server/server.go
go run client/client.go

grpc自带了codegen.sh可以方便的编译proto

1
$GOPATH/src/google.golang.org/grpc/codegen.sh  route_guide.proto

获取grpc-common的sample

1
2
go get -u github.com/grpc/grpc-common/go/greeter_client
go get -u github.com/grpc/grpc-common/go/greeter_server

分别在两个终端输入

1
greeter_server

客户端:

1
greeter_client

就可以看到效果了。

上面是grpc自带的两个例子, 关于更多gRPC的内容, 持续更新。

在OSX中通过源码编译Go开发环境和Go多版本管理

在Mac系统OSX中,默认可以通过多个方法安装Go语言开发环境:

备注: 本文主要以1.5之前的版本有效。 Go 1.5版本要依赖1.4的源码才能编译。 Go 1.5还没有正式发布,坑比较多,想折腾1.5的可以参考 http://dave.cheney.net/2015/03/03/cross-compilation-just-got-a-whole-lot-better-in-go-1-5

  1. brew install go —- 什么是brew? 见http://brew.sh/
  2. 下载pkg直接安装二进制包, 默认会安装到 /usr/local/go 目录中 —- 下载地址: https://golang.org/dl/
  3. 通过源码安装

下面主要讲第3种,通过源码安装:

环境变量

下面是我使用的环境变量,把 GOROOT 和 GOPATH 都放在 ~/go 用户的主目录中
首先新建两个目录

1
2
mkdir ~/go/goroot
mkdir ~/go/gocode

其中:
~/go/goroot 主要放go的源码和编译后文件。
~/go/gocode 为go get的第三方的项目和自己写的项目。

修改下面you为你的用户名称,下面文中的you都是指你的用户名。
Linux用户记得修改GOARCH和GOOS, 主目录 /Users/you 改为 /home/you , 更多请参考 http://golang.org/doc/install/source#environment

~/.bashrc ~/.zshrc ~/.profile 任意一个或多个文件中添加一下设置命令

1
2
3
4
5
6
7
#go
export GOARCH=amd64
export GOOS=darwin
export GOROOT=/Users/you/go/goroot         #go source 
export GOPATH=/Users/you/go/gocode         #go code
export GOBIN=$GOROOT/bin
export PATH=$GOROOT/bin:$GOPATH/bin:$PATH

下载Go源码

默认源码直接直接下载 https://golang.org/dl/ 下载最新的源码。
或者通过 git clone https://go.googlesource.com/go 取最新的源码,注意!git仓库的源码是最新的源码,如果是1.5版本要依赖1.4的源码才能一起编译。 记得把go的源代码放到 /Users/you/go/goroot 中 记得 把go改为goroot 类似这样的结构 /Users/you/go/goroot/src

编译GO

进入GOROOT,

1
2
3
4
cd $GOROOT/src
#或者
cd /Users/you/go/goroot/src
./all.bash

提示以下信息就意味着编译成功

1
2
3
4
5
ALL TESTS PASSED

---
Installed Go for darwin/amd64 in /Users/you/go/goroot
Installed commands in /Users/you/go/goroot/bin

重新打开终端输入

1
2
3
which go
go version
go env

就可以看到版本信息和环境变量信息

获取第三方的项目,以revel为例子

1
2
3
4
# get revel framework 获取revel框架         
go get github.com/revel/revel
# get 'revel' command 获取revel命令
go get github.com/revel/cmd/revel

通过go get获取的源码都会放到 /Users/you/go/gocode/ 目录下面
其中二进制的执行文件会安装到 /Users/you/go/goroot/bin/ 目录下面
通过一下命令就可以看到效果:

1
2
ls ~/go/gocode/src/github.com/revel/
which revel

gvm - Go多版本管理器

https://github.com/moovweb/gvm
通过一下命令安装:

1
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

gvm常用命令:

1
2
3
gvm listall   #列出所有版本
gvm list      #列出已安装版本
gvm install 1.4  #安装版本