阅读更多

25顶
4踩

编程语言

翻译新闻 Google Go编程语言入门

2010-01-21 11:28 by 资深编辑 wutao0603 评论(32) 有22665人浏览

Go是去年Google推出的一种全新的编程语言。专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。

 

Variable Declarations(变量声明)
var sum int // Just a declaration
var total int = 42 // A declaration with initialization

第一眼看上去有些奇怪,但这样是有好处的,例如下面的这个C代码片段:

int* a, b;

这就意味着a是一个指针,但b却不是。要声明他们都是指针必须重复两次,但在Go中,你可以这样声明:

var a, b *int

 

当一个变量被初始化后,编译器会自动识别他的类型,所以不必要指明其类型:

var label = "name"

 

这样var关键字也就多余了,因此作者提出了一个新的赋值操作符声明并初始化一个新变量:

name := "Samuel"

Conditionals(条件) 

Go中的条件句使用If-else,与C语言相同。但是它的条件不需要包含在括号中,这将减少阅读代码时的视觉混乱。当然,在条件之前还可以添加一个简单的声明。

 

result := someFunc();
if result > 0 {
	/* Do something */
} else {
	/* Handle error */
}

还可以:

if result := someFunc(); result > 0 { 
	/* Do something */
} else {
	/* Handle error */
}

 

Switches

Switches 语句也与C类似,但是在C的基础上进行了改进。

 

 C 代码:

int result;
switch (byte) {
 case 'a':
 case 'b':
   {
     result = 1
     break
   }

 default:
   result = 0
}

 Go 代码:

var result int
switch byte {
case 'a', 'b':
  result = 1
default:
  result = 0
}

 

Go 匹配的不仅仅是integer和character类型。

 C 代码:

int result = calculate();
if (result < 0) {
  /* negative */
} else if (result > 0) {
  /* positive */
} else {
  /* zero */
}

Go 代码:

switch result := calculate(); true {
case result < 0:
  /* negative */
case result > 0:
  /* positive */
default:
  /* zero */
}

当switch的值被忽略时,假设为真,所以上述代码还可简化为:

switch result := calculate(); {
case result < 0:
  /* negative */
case result > 0:
  /* positive */
default:
  /* zero */
}

 

原文对Go语言的语法进行了详细的介绍,此文章只是原文的一小部分,更多详情请查看原文:Google Go: A Primer

来自: infoq
25
4
评论 共 32 条 请登录后发表评论
32 楼 wuhoufeng 2012-08-07 18:14
houniao 写道
一个主要问题是目前不支持win32

服务器端的语言
31 楼 mfkvfn 2011-11-17 08:41
go不支持继承?
30 楼 zxeoc 2011-10-09 15:11
egmkang 写道
xuby 写道
wangzaixiang 写道
jfxia 写道
严重怀疑作者是否写过C语言程序,真是不敢相信这段代码能通过C编译:

   {
     result = 1
     break
   }

default:
   result = 0


是啊,严重质疑,这么简单的代码咋就不能编译了呢?你用的是火星上的C编译器啊?

我可以负责任的讲,这段代码在目前地球上所有的C编译器上都不可能编译通过。


我可以负责任的告诉你,这是火星上面的C语言编译器

那就麻烦你们负责人的去下载一个Turbo C,把代码粘进去编译下再说,那段代码除了编辑的时候落下了每行结尾的分号,别的一切正常,我刚在TC3里试过
29 楼 000044441111 2010-12-11 20:54
现在的编程语言最不爽的就是语法,你一种语法,我一种语法,其实想表达的就是同样一种意思,可是语法确多种多样,这样会给编程者带来混乱。。。。。。
28 楼 七月十五 2010-01-23 22:17
var让我想起了PHP4
27 楼 zxzheaven 2010-01-23 16:38
编译的程序可以媲美C或C++代码的速度
真的吗?
26 楼 xbcoil 2010-01-23 11:13
这个只是小语言吧.....超不过java的........
25 楼 faylai 2010-01-23 10:52
希望真能go 起来
24 楼 朗拿颠老 2010-01-23 09:51
  等性能测试报告
23 楼 houniao 2010-01-22 22:57
一个主要问题是目前不支持win32
22 楼 houniao 2010-01-22 22:56
都是些grammar sugar意义也没想象中的大
其实我觉得go的不支持继承、编译语言的自动垃圾回收以及并行应该还是不错的
21 楼 itstarting 2010-01-22 22:06
暂时看不出亮点
20 楼 cjx186 2010-01-22 21:09
skydream 写道
感觉语法比较恶心,而且这些地方根本不是关键所在啊?if, case,定义变量,这些东西只要不是做的太混蛋,对语言的开发能力影响不大。

关键的东西在后面啊,比如c/c++有性能,java有严谨的语法和丰富的类库,erlang的并行。Go的优势到底在哪里啊?

可以肯定的说,没有人会为了一个if,case的写法而更改语言。

支持 ,写C为了速度性能,写Java因为类库,写go不会是因为google,呵呵
19 楼 fineqtbull 2010-01-22 19:54
不错的入门介绍,学习了。
18 楼 skydream 2010-01-22 17:07
感觉语法比较恶心,而且这些地方根本不是关键所在啊?if, case,定义变量,这些东西只要不是做的太混蛋,对语言的开发能力影响不大。

关键的东西在后面啊,比如c/c++有性能,java有严谨的语法和丰富的类库,erlang的并行。Go的优势到底在哪里啊?

可以肯定的说,没有人会为了一个if,case的写法而更改语言。
17 楼 jxjnice 2010-01-22 15:16
":="好
16 楼 Jerry'sEye 2010-01-22 13:45
语法很奇怪。
15 楼 egmkang 2010-01-22 12:57
xuby 写道
wangzaixiang 写道
jfxia 写道
严重怀疑作者是否写过C语言程序,真是不敢相信这段代码能通过C编译:

   {
     result = 1
     break
   }

default:
   result = 0


是啊,严重质疑,这么简单的代码咋就不能编译了呢?你用的是火星上的C编译器啊?

我可以负责任的讲,这段代码在目前地球上所有的C编译器上都不可能编译通过。


我可以负责任的告诉你,这是火星上面的C语言编译器
14 楼 xuby 2010-01-22 11:13
wangzaixiang 写道
jfxia 写道
严重怀疑作者是否写过C语言程序,真是不敢相信这段代码能通过C编译:

   {
     result = 1
     break
   }

default:
   result = 0


是啊,严重质疑,这么简单的代码咋就不能编译了呢?你用的是火星上的C编译器啊?

我可以负责任的讲,这段代码在目前地球上所有的C编译器上都不可能编译通过。
13 楼 bookong 2010-01-22 10:23
引用
case result < 0:

还是比较有趣的。

引用
result := someFunc();

好像Delphi,好怀念啊……

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • DzNoteEditor:用于TString的Delphi属性编辑器,支持带语法突出显示的格式化语言

    DzNoteEditor 用于TString的Delphi属性编辑器,支持带语法突出显示的格式化语言 什么是新的 03/13/2021(版本1.6) 由于出现AV错误肯定警告,已从组件源中删除了CompInstall.exe(现在您可以直接从CompInstall存储库中获取它)。 02/01/2021(1.5版) 从环境列表中删除了Delphi XE2,因为该版本无法进行编译。 2020年12月18日(1.4版) 更新了组件安装程序应用程序(将Delphi安装在包含空格字符的路径中时,对rsvars.bat的固定调用)。 2020年10月31日(1.3版) 随附的Delphi 10.4自动安装支持。 2020年10月27日(1.2版) 修复了以前的Delphi版本(至少在XE2,XE3,XE4和XE5上)软件包标签。 这导致程序包编译错误。 修复了System.Ima

  • Delphi 样例-属性编辑器

    运行效果如下 窗体布局 object Form1: TForm1 Left = 0 Top = 0 Caption = #31034#20363'-'#23646#24615#32534#36753#22120 ClientHeight = 243 ClientWidth = 527 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -

  • DELPHI--关于ValueListEditor控件

    DELPHI--关于ValueListEditor控件(2011-02-22 17:56:30)转载▼标签:it 分类: 工作—编程1.请问在ValueListEditor里,如何知道我选择了哪一行吗?? 答:用procedure TControlPanel.ParamEditorSelectCell(Sender: TObject; ACol, ARow: Integer; var Ca...

  • CBC中,TValueListEditor控件的基本插入

    CBC中,TValueListEditor控件的基本插入

  • Delphi2010 RTTI + Attribute 简单实现ORM实例

    1、支持ORM,最基础的两个信息是表的信息和字段信息。这两个信息,如果用Attribute 来辅助,代码更简洁和可读性更好。可以把属性名当做真实字段名,也可以将特性里的属性当成真实姓名,再加上字段标题(可以当成注释)、必填字段、是否为主键、显示格式等等,如果没有Attribute ,类、属性的辅助信息必须用其他信息来描述,非常麻烦。 uses SysUtils, RTTI, TypInfo

  • Runtime中property_getName与property_getAttributes

    初步接触Runtime相关方法

  • getAttribute获取属性值

    获取style时,firefox中可以正确运用.ie中则需再用cssText.

  • Delphi属性Property学习应用总结

    Property是一个很有意思的语法特性,它使得方法具有了字段的调用特征,并赋予字段执行动作的能力。 如果你使用过C++ Builder来写基于VCL的程序,我想很多人都会注意到这样一点,比如:edt.Text = &quot;test&quot;; 这个时候edt文本框的内容会随之改变,但是“理论”上Text应该只是改变了Text所在的内存数据而已,为什么会导致窗口更新界面着一些列动作? 这就是因为Proper...

  • delphi编辑器功能

    1.        打开(opendialog1) procedure TForm1.Button1Click(Sender:TObject);  //打开文件 begin   if opendialog1.Execute then     memo1.Lines.LoadFromFile(opendialog1.FileName) ; end;   2.        保存(sav

  • not find ComponentDesigner.pas ComponentDesigner.dcu 解决方法

    http://blog.csdn.net/highroad/article/details/4782955 编译发现还是组件中找不到DesignIntf.pas、Proxies.pas、ComponentDesigner.pas等源文件,网上查找但没有几个能解决问题。后来找到一个办法,即在组件包中加入一个delphi7带的DesignIde.dcp,如下红色标识的代码。       Delph

  • (delphi)程序运行过程中等待对话框的自定义组件源码(包含两个提示,进度条,AVI)

    注意:(组件安装前请按以下操作,des32.pas 对本工具无用)                                   用Delphi打开dsDlgPack.dpk组件包,然后“移去(Remove)”des32.pas文件,否则编译通不过源码下载地址:http://www.csdn.net/cnshare/soft/openfile.asp?kind=1&id=21608若不能下载

Global site tag (gtag.js) - Google Analytics