总体来说,使用Go语言开发,可以极大的提高生产力。
然而也有几处脑残设定,让人诟病不已。
C++中,有.h、.cpp文件的概念。即可以做到声明与实现分离。
这种特性可以带来很多优点:
上面的几个优点,可能对于大多数程序来说,这不是很平常的事吗,是语言不是都有这样的功能吗…
其实不是的。
Go语言的声明与实现是不可分离的(除了interface)。因此要实现上述功能。在Go中都需要做不少额外的事情。
模块间相互引用的问题
唯一的方法,设计接口类、工厂模式,来解耦2个模块间的相互引用问题。使用不当会增加不少多余的编码量
提供库问题
唯一的方法,将Go库编译成C库(会自动生成.h文件)。然后再使用Go与C混合编程。这会极大的增加编码量
因此使用Go语言来进行游戏开发时,下面2件事情通常会是一个头疼的问题:
go get在使用上给程序提供了不少便利。不过有个小缺陷,必须吐槽下!
go get 居然没有提供一个参数来指定版本号。
go get下来的都是master上的代码!
因为官方的不支持,github上作者们也似集体失忆一样的,README.md中对自己使用的依赖库都不会做版本号的备注。
因此你在使用第3库、使用go get 的过程可能是这样的:
已无力吐槽中…
通常遇到这种情况,最终你会输出类似下面的脚本,来避免自己重新痛苦一遍:
set GOPATH=%~dp0
go get google.golang.org/grpc/...
go get github.com/coreos/etcd/clientv3/...
cd %GOPATH%/src/github.com/coreos/etcd/clientv3
git checkout --no-track -B Branch_v3.2.9 v3.2.9 --
cd %GOPATH%/src/google.golang.org/grpc
git checkout --no-track -B Branch_v1.5.2 v1.5.2 --
下章将介绍如何使用Godep来管理项目中的第3方库