Go
| Go | |
|---|---|
![]() |
|
| 編譯型, 並發型,結構化,指令式 | |
|
发行时间
|
2009 |
|
設計者
|
罗伯特·格瑞史莫(Robert Griesemer) 羅勃·派克(Rob Pike) 肯·汤普逊(Ken Thompson) |
|
實作者
|
|
|
主要實作產品
|
gc (8g, 6g,5g), gccgo |
|
啟發語言
|
C、Oberon、Limbo、Newsqueak[1] |
| Linux, Mac OS X, FreeBSD | |
| BSD | |
| http://golang.org/ | |
Go是Google開發的一种編譯型,並發型,并具有垃圾回收功能的编程语言。[2]
羅伯特·格瑞史莫(Robert Griesemer),羅勃·派克(Rob Pike)及肯·汤普逊於2007年9月开始设计Go語言,[1],稍後Ian Lance Taylor, Russ Cox加入專案中。Go語言是基於Inferno操作系統所開發的。[3]Go語言於2009年11月正式宣布推出,成為開放原始碼專案,并在Linux及Mac OS X平台上进行了實現,后追加Windows系统下的实现。[4]
目录 |
描述 [编辑]
Go語言的语法接近C語言,但是对于变量的声明是不同的,其他語法不同之處是For迴圈和if判斷式沒有括弧圍繞。Go語言支持垃圾回收功能。Go語言的併行模型是以東尼·霍爾的CSP為基礎,採取類似模型的其他語言包括occam和Limbo,[1],但它也具有Pi运算的特征,比如通道传输。
与C++相比,Go語言並不包括如异常处理、继承、泛型、断言、虚函数等功能,但增加了slice型、并发、管道、垃圾回收、接口(interface)等特性的语言级支持[1]。當然,Google 對於泛型的態度還是很開放的,但在該語言的常見問題列表中,對於断言的存在,則持負面態度,同時也為自己不提供型別繼承來辯護。不同于Java,Go語言内嵌了关联数组(也称为哈希表(hashes)或字典(dictionaries)),就像字符串类型一样。
实现 [编辑]
当前有两个Go語言的编译器的分支。
Go语言的编译器有2个编译器,gccgo和不同架构下的编译器,有6g/8g/5g分别代表64位、32位及Arm架构编译器。下面看编译的代码:6g编译器使用:
$ 6g helloworld.go # 把原始码编译到 helloworld.6 这个 object file $ 6l helloworld.6 # 把所需的 object files 給連結起來,輸出可執行檔到 6.out $ ./6.out Hello, world; or 你好世界 $
gccgo 编译器使用:
$ gccgo helloworld.go $ ./a.out Hello, world; or 你好世界 $
6g(X86-64)、8g(X86)、5g(arm) (及其支援工具,总称为gc)用C写成,使用yacc/Bison作为解析器。Gccgo是一个使用标准GCC作为后端的Go编译器[5]。
範例 [编辑]
下面是用Go語言写成的Hello World程序。
package main import "fmt" func main() { fmt.Println("Hello, World") }
下面的例子说明了怎样用Go語言去实现一个像Unix中的 echo命令的程序[6]:
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) }
同名爭議 [编辑]
2003年發表的程式語言Go!,名稱與Go雷同。
參考文獻 [编辑]
外部連結 [编辑]
- Go Programming Language Homepage
- Go language FAQ
YouTube上的「The Go Programming Language」视频- IRC:#go-nuts on irc.freenode.net
- Mailing list : http://groups.google.com/group/golang-nuts
- 学习 Go 语言
- Go Web 编程
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||
