分享
  1. 首页
  2. 文章

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

DSharp · · 3389 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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大放异彩,让人克服入门的小问题而去使用它.


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:DSharp

查看原文:go语言的设计的一点粗浅看法

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
3389 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏