go语言的设计的一点粗浅看法

    Go是Google开发的一种编译型,并发型,并具有垃圾回收功能的编程语言。罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pike)及肯·汤普逊于2007年9月开始设计Go语言,[1],稍后Ian Lance Taylor, Russ Cox加入专案中。

    Go语言这个出自大公司Google的大牛的作品, 为什么没有象出自Microsoft的anders hejlsberg的C#这么吸引人并流行起来呢?其实Go语言的设计者也是有名的大牛,但为什么三个臭皮匠,竟然抵不过一个诸葛亮呢.本人以初学者第一次接触Go语言来说说粗浅的看法.    

package main
 
import "fmt"
 
func main() {
        fmt.Println("Hello, World")
}

看上面这个Hello world.首先这就有问题.Go号称是最接近C但目标是取代C的.但这个名家之手的东西,以本人初学者来看就有两大问题.

1.没有标点符号,语法很接近C,但没有符号,这就象我们写文章,读惯了带逗号句号的,突然有个东西号出来的都没有,会很不习惯.这代码乍一看还以为蹩脚C入门者写Hello world.给写错了.

2.fmt是什么库?看名字是看不出来的,想不到大牛对于命名也和初学者一样,初学者学一门语言,一般肯定先从Hello world.入手,从控制台输出入手.这给初入门学习者开了个坏头.

以Wiki例子

package main
 
import (
        "os"
        "flag" // command line option parser
)
 
var omitNewline = flag.Bool("n", false, "don't print final newline")
 
const (
        Space   = " "
        Newline = "\n"
)
 
func main() {
        flag.Parse() // Scans the arg list and sets up flags
        var s string = ""
        for i := 0; i < flag.NArg(); i++ {
                if i > 0 {
                        s += Space
                }
                s += flag.Arg(i)
        }
        if !*omitNewline {
                s += Newline
        }
        os.Stdout.WriteString(s)
}

    先以初学者的感觉来看,首先,所谓初学者,在当代其实大多数都知道点C, C++或别的什么,因为学校里就有这课程.然后再来年上面这堆代码.直觉告诉我,这很象一个C或C++或什么的初学者写出的,不注重语法,错误百出的代码.因为一般初学者喜欢两件事,一是忘记语法的哪些地方要括号哪些地方不加.还有就是标点符号.

    当然这也许就是设计者大牛们考虑到的因素,干脆就不需要了.但问题来了,如果你写惯C类代码,再来写它或看它会感觉不太适应,然后再切回C类也一样.纠结于标点符号.这一点上,Python也是一样的,但Python通过空格强制,起码让你不会认为在写C类程序.

  var s string = "" 这样的变量定义, 不太理解为什么要这么做,从初学者的角度就是不容易理解.当然对于直接没接触过任何编程语言的人除外.

for i := 0 同样变量定义和赋值语句,这个:=是怎么回事?为什么和上面的变量定义不一样?从初学者的角度就是不容易理解.当然对于直接没接触过任何编程语言的人除外.

 从语法层面,未经仔细考虑用户感受的设计,让使用者产生凌乱的感觉.这让人想到了windows8的Start键.或许这是一种更优秀的设计,但一开始的确不顺手.

当然,Go提供了一些新的理念,比如以组合为范式,简单的说,只要是方法签名相同,就可以当成接口,这倒是一个不错的想法,动态语言就是这么干的.C#的delegate和interface也是这么干的.但不同.GO做这些都是隐式的.(也许这里表达的不准确,因为没有仔细看过go语言)

以本人的初浅观点来看,Go语言未能仔细设计语言的表达,一开始就犯下很多初学者的错误,功能再强,让Hello world这样的程序就阻挡了人的学习欲望.也许将来有那么一天,Go大放异彩,让人克服入门的小问题而去使用它.

你可能感兴趣的:(go语言)