技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 编程语言 --> 从Go看,语言设计(一)

从Go看,语言设计(一)

浏览:4752次  出处信息

Go语言发了正式版,终于像一个正经的东西了,不再需要每次从版本控制里面拿代码编译了。拿来把玩一番,看到了一些有趣的东西,记录一下。

作为一门现代程序设计语言,Go语言从语言设计上反应出现代程序设计语言一些重要变化。

函数成为第一类对象

函数式编程已经无可阻挡地成为程序设计语言发展的重要趋势,只要是还在演进之中的程序设计语言,函数式编程都已经成为其重要的一部分,即便是Java这个笨重的大象,也会在Java 8中引入lambda。函数式编程的第一步,就是让函数成为第一类对象,也就是可以把函数作为参数和返回值传递。然后,才会有高阶函数,以及后面的一系列变化。

下面是一个简单的Map实现:

func Map(elements []int, f func(int)(int)) (results []int) {
results = make([]int, len(elements))
for i, element := range elements {
results[i] = f(element)
}
return
}

调用起来也很简单:

result := Map(elements, func(element int) int {
return element + 1
})

稍微多说几句,在新一期的ThoughtWorks技术雷达上,函数式Java跃然纸上。我对这个问题的理解是,并不仅仅是要有函数式的语言构造,更应该是将函数式编程的一些理念引入到日常的开发中,比如引用透明性,无状态函数等等,这是个有趣的话题。

简化代码编写

程序员每天要写很多代码,设计一门程序设计语言,除了要考虑各种各样的语言特性之外,很重要的一点就是,就是让写代码更容易。类型推演和内置数据结构就是在这个方向上的努力,Go语言就提供了这两方面的支持。看看下面这段代码,典型的Java嗦代码:

List lists = new ArrayList();
lists.add(0);
lists.add(1);
lists.add(2);

  • 类型推演

动态类型语言很令人羡慕的一点就是,他们的变量不用反反复复地写类型。它们也有让人鄙视的地方,没有类型的变量无法做静态检查,许多错误只能在运行阶段暴露。类型推演给予我们一个鱼与熊掌兼得的机会:既能从繁琐的类型声明中解脱出来,又能拜静态类型所赐,在编译期就可以做很多检查,减小犯错的几率。

例子:

    car := new(Car)

  • 基本数据结构已不可或缺

从语言设计的角度来讲,基本数据结构并不是语言的一部分。但从程序员的角度来说,基本数据结构的缺失会让代码显得无比嗦,这是对追求整洁代码之人的折磨。所以,有了人写了Guava这样的库,解救水深火热的Java人,下面是前面那段代码的Guava版本:

List lists = newArrayList(0, 1, 2);

Go语言内置了一些数据类型的支持,让代码编写稍微简化了一些,不过,相比于很多语言,它还不够简洁。

有了类型推演和基本数据结构,前面那段嗦的代码在Go中就是这个样子了:

    elements := []int{1, 2, 3}

建议继续学习:

  1. Go Reflect 性能    (阅读:9996)
  2. Go 语言初步    (阅读:3465)
  3. go-kit 入门(一)    (阅读:3523)
  4. 为什么我们要使用Go语言以及如何使用它的    (阅读:3087)
  5. 从Go看,语言设计(二)    (阅读:2889)
  6. Go 语言初学实践(1)    (阅读:2215)
  7. lua cothread    (阅读:2059)
  8. Go 语言简介(上)— 语法    (阅读:1817)
  9. Go 语言初学实践(2)    (阅读:1692)
  10. Go 语言简介(下)— 特性    (阅读:1560)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1