14十一/090
初探Go语言
初探Go语言

- 函数可返回复数的值
- 如果要用C语言来实现相同的功能,只能通过引用参数来实现,而Java则可以返回返回值对象。Go语言支持返回复数的值,这样一来减小了开发的压力,一定程度地提高了开发效率吧。
- 将string作为内嵌类型
- string内部使用UTF-8编码。string类型是immutable(文字不可改写)且是unmodifiable(尺寸不可改变)的。这与Java的String类是移植的。如果想使用可变大小,内容的字符串,需要自己实现byte的动态数组。让人觉得有点半途而废的感觉,为什么不实现内嵌的可变字符串类型呢?container/vector库中的stringvector类型好像可以。
- 将map作为内嵌类型
- map类型也作为内嵌的类型之一。与数组的使用语法相同,且索引不仅是数字。另外Go语言不支持运算符重载。
- defer语法
- 如果在函数退出的时候有些什么资源释放等必须要执行的代码,可以用这个语法。其实,可以说是一个以函数为单位的finally语言功能。有了它还是为了来省却了一定的劳动力吧。
另外,也有不喜欢Go语言一些地方。
- 语法类似Pascal
- Go和C的语法一点都不像,反而像是Pascal。没有了中括号,取而代之的是begin与end。
- 类型写在变量之后
- 还是Pascal的风格,习惯了C的编程风格,怎么看也看不惯,也许习惯了就好了吧。
- 没有while和do-while
- 循环只能用for。另外switch-case中不支持fall through(指每个case的后面不写break,上一个case的后面不写back,自动走向下一个case语句),从语法上定义了只执行case小节中的代码,不会自动执行下面的case。如果想要实现C,Java语言中的fall through,需要使用fallthrough关键词。换句话说,每个case最后不用break来跳出switch,它会自动跳,反倒是fallthrough的情况下需要说明了,正好相反。这样一来,还是为了减少人为错误吧。
- 没有类
- 在面向对象编程,面向服务编程的今天,没有类的感念—-这个设计理念倒是挺大胆的。
- 数组,对象实例可以保存在栈上
- Java语言中,即使是只在函数内部使用的对象,其实体也被分配到堆上。随之带来的内存释放(GC)多少都是有些性能开销的。Go语言支持该特性。
- 没有指针运算,但是有指针类型
- 为什么有指针类型而没有指针运算呢,理由之一就是为了实现参照上面说到的保存在栈上的对象。
为了实现参数引用传递,有以下几种类型
- 类似C++语言的引用参数
- 类似Java语言的对象,实例,数组类型
- 类似C语言或者是Go语言的用运算符(&)来传递指针型的值
- 没有泛型
- 没有泛型遭到很多使用者的非难。
- 接口类型
- 名称与Java语言一样,都是interface,使用目的也大同小异。使用方法可以参考这里。从调用端的视点看,使用接口型的变量的时候,调用虚拟函数,如果不是调用静态函数。
- goroutine与channel
- Go语言的卖点之一。将线程处理作为语言的功能之一,使并行处理的编程不再复杂,具体可以参照这里。
相关文章
- 乔布斯教给我们十条经验 - (2011-10-05)
- 2011年 - (2011-01-04)
- Go语言 - (2009-11-11)
- 现代CPU的传统体系结构 - (2009-10-06)
- subversion客户端版本不一致引来的错误 - (2009-09-28)
- 今天开博了! - (2009-09-18)
- 相册 - (2009-09-18)
- Emacs - (2009-09-18)
- Programming - (2009-09-18)
- 关于 - (2009-09-18)