go语言官方博客 go语言实战下载

Bowery为什么放弃Node.js,转向Go语言Bowery是一个基于云技术的开发平台,强大的协同处理技术让即使分散各地的团队成员都能无缝地进行工作 。在2014年进行的一次由Node.js转到Go的变更中 , Bowery获得了不错的性能提升 。那么Go有哪些亮点值得开发者关注的呢?
强大的跨平台编程能力
Bowery团队指出Go能很方便地在不同系统里进行程序编译,这是他们转入Go的重要原因之一 。
作为开发平台 , 对Linux,Windows,OSX等常见操作系统提供支援是能否吸引开发者的基本要素 。在Go中 , 开发者可以针对不同操作系统定义不同的文件来实现相同的功能函数 。Bowery团队成员Larz在创建Prompt应用(命令行输入)时,就是借助Go而轻松实现了跨平台编译 。而开发者要做的,就是设置好不同的环境变量 。
快速部署
在Go平台中,从测试环境到真实环境的切换是非常便捷的 , 因为它无需额外的系统依赖 。特别是对于Bowery提供给用户的命令行工具来说,用户无需安装Java , RVM或者NPM等工具便可正常运行 。
并发处理
Node.js在并发处理方面处于劣势,仅有I/O程序或计时器运行在并发模式 。因此如果希望打造一个快速响应的跨程序通讯系统,Go无疑是更好的选择 。Go提供了低级别的并发处理基元,例如mutexes、wait groups等等 。
整合测试框架
如果希望找到一个标准化的整合测试框架,不妨进入Go来体验一番 , 它内建了完整的测试包,免去了四处寻找的麻烦 。如果想编写一个新的测试套件,只要把_test.go文件添加到相同的包里就可以了 。有关Go测试的更多信息,请点击这里进行访问 。
标准库
Go提供了标准库 , 标准库的好处是无需包含其他扩展库,从而能节省开发时间并且还提高了健壮性 。
强大的开发者工作流工具
Go的工作区界面能帮助建立标准化的工作流,虽然这或许会压缩了开发的自由度,但得到的是一个结构化的有条理的工作区:该区有三个根目录,src
用于放置源码包,pkg用于放置编译包,bin放置的是执行文件 。把源码和依赖文件集中存储的好处是使团队成员都有一个相同的文档结构 , 而不会出现杂乱的
文档情况 。此外gofmt能以相同风格对代码进行格式化,这是一个非常实用的功能 。所以一旦需要进行调试 , 只需集中精力解决当前问题而无需分心处理结构或
风格等琐碎问题 。
最后总结几点Go语言学习心得 , 希望对新接触Go语言的开发者有所帮助:
经常访问官方博客 , 获取最新Go资讯;
经常访问官方教学文档;
建议浏览Ardan工作室成员Bill
Kennedy的Go编程博客;
Go by
Example上有大量的实例,能帮助开拓视野;
GopherAcademy有很多有关Go最佳实践的文章 。
如何看待go语言泛型的最新设计?Go 由于不支持泛型而臭名昭著go语言官方博客 , 但最近go语言官方博客,泛型已接近成为现实 。Go 团队实施go语言官方博客了一个看起来比较稳定的设计草案,并且正以源到源翻译器原型的形式获得关注 。本文讲述的是泛型的最新设计,以及如何自己尝试泛型 。
例子
FIFO Stack
假设你要创建一个先进先出堆栈 。没有泛型,你可能会这样实现:
type Stack []interface{}func (s Stack) Peek() interface{} {
return s[len(s)-1]
}
func (s *Stack) Pop() {
*s = (*s)[:
len(*s)-1]
}
func (s *Stack) Push(value interface{}) {
*s =
append(*s, value)
}
但是 , 这里存在一个问题:每当你 Peek 项时,都必须使用类型断言将其从 interface{} 转换为你需要的类型 。如果你的堆栈是 *MyObject 的堆栈,则意味着很多 s.Peek().(*MyObject)这样的代码 。这不仅让人眼花缭乱,而且还可能引发错误 。比如忘记 * 怎么办?或者如果您输入错误的类型怎么办?s.Push(MyObject{})` 可以顺利编译,而且你可能不会发现到自己的错误,直到它影响到你的整个服务为止 。

推荐阅读