跳转到内容

Go:修订间差异

维基百科,自由的百科全书
删除的内容 添加的内容
无编辑摘要
无编辑摘要
第4行: 第4行:
| logo = [[File:Golang.png]]
| logo = [[File:Golang.png]]
| caption =
| caption =
| paradigm = [[:en:compiled language|編譯型]], [[并行计算|並發型]],[[結構化程式設計|結構化]],[[指令式編程|指令式]]
| paradigm = [[:en:compiled language|編譯型]], [[并行计算|-{zh-hans:並發型;zh-hant:可平行化}-]],[[結構化程式設計|結構化]],[[指令式編程|指令式]]
| year = 2009
| year = 2009
| designer = [[罗伯特·格瑞史莫]]({{link-en|Robert Griesemer|Robert Griesemer}}<br />[[羅勃·派克]]([[:en:Rob Pike|Rob Pike]])<br />[[肯·汤普逊]]([[:en:Ken Thompson|Ken Thompson]])
| designer = [[罗伯特·格瑞史莫]]({{link-en|Robert Griesemer|Robert Griesemer}}<br />[[羅勃·派克]]([[:en:Rob Pike|Rob Pike]])<br />[[肯·汤普逊]]([[:en:Ken Thompson|Ken Thompson]])
第22行: 第22行:
}}
}}


'''Go'''是[[Google]]開發的一种[[:en:compiled language|編譯型]],[[并行计算|並發型]],并具有[[垃圾回收 (計算機科學)|垃圾回收功能]]的[[编程语言]]。<ref>[http://www.techcrunch.com/2009/11/10/google-go-language/ Google-go-language]</ref>
'''Go'''是[[Google]]開發的一种[[:en:compiled language|編譯型]],[[并行计算|-{zh-hans:並發型;zh-hant:可平行化}-]],并具有[[垃圾回收 (計算機科學)|垃圾回收功能]]的[[编程语言]]。<ref>[http://www.techcrunch.com/2009/11/10/google-go-language/ Google-go-language]</ref>


[[羅伯特·格瑞史莫]]({{link-en|Robert Griesemer|Robert Griesemer}}),[[羅勃·派克]](Rob Pike)及[[肯·汤普逊]]於2007年9月开始设计Go語言,<ref name="langfaq">[http://golang.org/doc/go_faq.html Language Design FAQ]</ref>,稍後Ian Lance Taylor, Russ Cox加入專案中。Go語言是基於[[Inferno]]操作系統所開發的。<ref>[http://golang.org/src/cmd/goyacc/goyacc.go goyacc.go: '''Derived from Inferno's utils/iyacc/yacc.c''']</ref>Go語言於2009年11月正式宣布推出,成為開放原始碼專案,并在[[Linux]]及[[Mac OS X]]平台上进行了實現,后追加Windows系统下的实现。<ref>[http://golang.org/doc/install.html#tmp_29 Installing Go]</ref>
[[羅伯特·格瑞史莫]]({{link-en|Robert Griesemer|Robert Griesemer}}),[[羅勃·派克]](Rob Pike)及[[肯·汤普逊]]於2007年9月开始设计Go語言,<ref name="langfaq">[http://golang.org/doc/go_faq.html Language Design FAQ]</ref>,稍後Ian Lance Taylor, Russ Cox加入專案中。Go語言是基於[[Inferno]]操作系統所開發的。<ref>[http://golang.org/src/cmd/goyacc/goyacc.go goyacc.go: '''Derived from Inferno's utils/iyacc/yacc.c''']</ref>Go語言於2009年11月正式宣布推出,成為開放原始碼專案,并在[[Linux]]及[[Mac OS X]]平台上进行了實現,后追加Windows系统下的实现。<ref>[http://golang.org/doc/install.html#tmp_29 Installing Go]</ref>
第34行: 第34行:
== 实现 ==
== 实现 ==


当前有两个Go語言的编译器的分支。
当前有两个Go語言的编译器的分支。gccgo和6g/8g/5g,其中6g/8g/5g分别代表64位、32位及Arm架构编译器。下面看编译的代码:6g编译器使用:

Go语言的编译器有2个编译器,gccgo和不同架构下的编译器,有6g/8g/5g分别代表64位、32位及Arm架构编译器。下面看编译的代码:6g编译器使用:


$ 6g helloworld.go # 把原始码编译到 helloworld.6 这个 object file
$ 6g helloworld.go # 把原始码编译到 helloworld.6 这个 object file

2013年10月23日 (三) 12:02的版本

Go
编程范型編譯型, 並發型結構化指令式
設計者罗伯特·格瑞史莫Robert Griesemer英语Robert Griesemer
羅勃·派克Rob Pike
肯·汤普逊Ken Thompson
實作者Google
发行时间2009
当前版本
  • 1.23.3(2024年11月6日)[1]
編輯維基數據鏈接
操作系统Linux, Mac OS X, FreeBSD
許可證BSD
網站http://golang.org/
主要實作產品
gc (8g, 6g,5g), gccgo
啟發語言
COberonLimboNewsqueak[2]

GoGoogle開發的一种編譯型並發型,并具有垃圾回收功能编程语言[3]

羅伯特·格瑞史莫Robert Griesemer英语Robert Griesemer),羅勃·派克(Rob Pike)及肯·汤普逊於2007年9月开始设计Go語言,[2],稍後Ian Lance Taylor, Russ Cox加入專案中。Go語言是基於Inferno操作系統所開發的。[4]Go語言於2009年11月正式宣布推出,成為開放原始碼專案,并在LinuxMac OS X平台上进行了實現,后追加Windows系统下的实现。[5]

描述

Go語言的语法接近C語言,但是对于变量的声明是不同的,其他語法不同之處是For迴圈if判斷式沒有括弧圍繞。Go語言支持垃圾回收功能。Go語言的併行模型是以東尼·霍爾CSP為基礎,採取類似模型的其他語言包括occamLimbo[2],但它也具有Pi运算的特征,比如通道传输。

与C++相比,Go語言並不包括如异常处理继承泛型断言虚函数等功能,但增加了slice型、并发、管道、垃圾回收、接口(interface)等特性的语言级支持[2]。當然,Google 對於泛型的態度還是很開放的,但在該語言的常見問題列表中,對於断言的存在,則持負面態度,同時也為自己不提供型別繼承來辯護。不同于Java,Go語言内嵌了关联数组(也称为哈希表(hashes)或字典(dictionaries)),就像字符串类型一样。

实现

当前有两个Go語言的编译器的分支。gccgo和6g/8g/5g,其中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编译器[6]

範例

下面是用Go語言写成的Hello World程序。

package main

import "fmt"

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

下面的例子说明了怎样用Go語言去实现一个像Unix中的 echo命令的程序[7]

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雷同。

參考文獻

外部連結