阅读更多

25顶
4踩

编程语言

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

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

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,好怀念啊……

发表评论

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

相关推荐

  • 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打造自己的文本编辑器

    文章目录通过Delphi打造自己的文本编辑器使用组件实施步骤具体实现1. 更换图标2. 添加MainMenu并编辑为如图所示3.添加组件4.实现各组件5. 运行 通过Delphi打造自己的文本编辑器 使用组件 菜单组件:MainMenu 菜单组件:OpenDialog 菜单组件:SaveDialog 菜单组件:FindDialog 菜单组件:ReplaceDialog 菜单组件:FontDialog 菜单组件:ColorDialog 实施步骤 添加Memo组件和菜单(MainMenu)组件 添加菜单

  • 测试Delphi控件属性保存到dfm

    控件单元代码: unit TstControl; interface uses Classes, SysUtils, Controls; type   //定义控件的属性类型    类型中的published方法可以自动保存到dfm中   TAuthorInfo = class(TPersistent)   private     FAuthorName: string;

  • DevExpress使用WaitDialogForm等待加载窗体

    在DevExpress中,当我们查询sql语句或处理大量的数据时,为了防止界面假死状态,加一个提示框比较人性化。 1.建立一个窗口 2.引用以下DevExpress.Data.v18.2.dll,DevExpress.Utils.v18.2.dll 3.代码 using DevExpress.Utils; using System; using System.Collections.Generic; using System.ComponentModel; using System.Da.

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

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

  • delphi文章等

    在Delphi编程中的文件操作 http://news.softhouse.com.cn/news/show/15723.html delphi关于文件操作的函数   http://www.cncfan.com/cncfan_com_article.asp?art_id=2502&cat_id=74关于文本文件http://www.75pc.com/viewthread.php?tid=2

  • getAttribute()与直接获取节点属性的区别

    关于getAttribute,setArribute,setArribute的理解 今天温习红宝书,看到264页DOM操作的取得特性,感觉很 疑惑之前获取特性一直都是直接获取可是为什么万能的高程书非得搞得这么麻烦弄出getArribute()这样的一个操作方法,所以我专门的去讨论了这三种方法,与直接操作属性的区别; 那么让我们先来看我们经常采取的一种获取标签中特性的方式

  • GetFileAttributes和SetFileAttributes

    //////////////////////知识抄袭///////////////////////////////GetFileAttributes || SetFileAttributesBOOL SetFileAttributes(LPCTSTR lpFileName,DWORD dwFileAttributes);    参数:lpFileName:输入参数,为需要设置文件属性的文件或目录。...

  • delphi提示:File not Found:DockForm.dcu的解决办法

    安装控件时,如果引用了dsgnintf单元,那么就会提示找不到proxy.pas 或者DockForm.dcu的错误,只需在安装控件包时添加“lib\DesignIde.dcp”即可

  • Runtime中property_getName与property_getAttributes

    初步接触Runtime相关方法

  • getAttribute获取属性值

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

  • 一个过期的Delphi问题(找不到DesignIntf.pas、Proxies.pas、ComponentDesigner.pas)

          公司的老的Delphi7开发的产品要维护,准备换上TBX那一套菜单,取到代码后,编译发现还是组件中找不到DesignIntf.pas、Proxies.pas、ComponentDesigner.pas等源文件,网上查找但没有几个能解决问题。后来找到一个办法,即在组件包中加入一个delphi7带的DesignIde.dcp,如下红色标识的代码。      Delphi如过眼云烟,现在

Global site tag (gtag.js) - Google Analytics