[Go语言]一、入门Hello,World

Go简介

 

为什么有了系统编程级别的C/C++以及后来的Java,也有脚本级别的Ruby/Perl/Python语言可用,Google为什么还要发布Go语言?

“我们开发Go,是因为近10年左右开发程序之难让我们有点沮丧”
                                             --首席软件工程师Rob Pike

 

Go完全支持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版本信息了。

image

Go的编辑器选择有很多种,这里选择sublime。键入Hello,world,运行程序,结束Go学习的入门第一课。

image

 

 

 

参考书《Go语言编程》:http://www.amazon.cn/s/ref=nb_sb_ss_i_0_6?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&url=search-alias%3Daps&field-keywords=go%E8%AF%AD%E8%A8%80%E7%BC%96%E7%A8%8B&sprefix=Go%E8%AF%AD%E8%A8%80%E7%BC%96%E7%A8%8B%2Caps%2C173&rh=i%3Aaps%2Ck%3Ago%E8%AF%AD%E8%A8%80%E7%BC%96%E7%A8%8B

posted @ 2014-06-27 23:50  Crafet.36.77  阅读(270)  评论(0编辑  收藏  举报