Go简介
为什么有了系统编程级别的C/C++以及后来的Java,也有脚本级别的Ruby/Perl/Python语言可用,Google为什么还要发布Go语言?
“我们开发Go,是因为近10年左右开发程序之难让我们有点沮丧”--首席软件工程师Rob PikeGo完全支持coroutine,即协程,也称为轻量级的线程。多数语言在语法层面不直接支持协程。一些语言或许可以通过第三方库来支持协程,但是功能并不完整。比如仅仅提供协程的创建,
销毁和切换能力。如果在这样的协程中调用一个同步IO,如网络通信/本地文件读写,都会阻塞其他并发的协程。从而无法真正的完成协程本身期望的目标。
Go在语言层面就支持协程,叫goroutine。Go语言提供的所有系统调用syscall,包括所有同步IO,都会让出CPU给其他goroutine。
运行方式是
func run (args string) { //... } func main() { go run(“go”) }只需要一个go关键字,就可以实现并发的协程运算,是不是很酷。
Go强调风格的强制统一。public的变量必须大写字母开始,private则以小写字母开始,这样就不用显示写出public和private修饰符了。
同时Go对代码块的起始“{”则有强制性要求。如
if expression { // 要求如此 } if expression { //编译错误 }
这里可以明显看出强制性,在C++/JAVA中,两种风格都允许,明显会带来一些风格的不统一。
Go首创的错误处理也很酷,如下看关键字defer的用法
f,err = os.open(filename) if err != nil { log.Println("open failed") return } defer f.Close()
这里的defer保证在函数退出时候,不管什么原因引起的异常,都会使得f的资源得到释放。
同时Go还支持多个返回值,虽然动态语言Python也支持。
一个defer就彻底让你放弃java中那些嵌套的try…catch…finally。
Go中不支持运算符和操作符的重载,C++/JAVA中提供的重载虽然解决了OOP部分问题,但是带来复杂性。
Go中放弃了构造函数和析构函数,没有虚函数,也没有了vptr,因此原来OOP中对象的开销都降到最小。GO在Google看来,是实战派作风,而不是学院派。
Go接受函数式编程思想,支持goroutine和通道,支持匿名函数和闭包,可以说,在系统级语言方面,Go是最有开放性的一门语言。
Go编程环境搭建
这里首先直接下载安装包:
http://gopher.qiniudn.com/download/go/go1.3.windows-amd64.zip
解压出其中的go顶级目录,拷贝到C下:C:\go。
配置环境变量到path后,就可以在命令行中看到go版本信息了。
。
Go的编辑器选择有很多种,这里选择sublime。键入Hello,world,运行程序,结束Go学习的入门第一课。
[Go语言]一、入门Hello,World,布布扣,bubuko.com