go语言入门教程.doc
go语言入门教程
go语言入门教程
PAGE / NUMPAGES
go语言入门教程
介绍
本文档是对于 Go 编程语言基础的一个介绍性的入门教程,倾向于熟
悉 C 或 C++ 的读者。本文并不是一份语言的完好指南,假如需要的话,你应当去看看 “语言规范 ”(language specification )。当读完本教程
以后,你可能会希望持续看看 “Effective Go,”这份文档更深入的发掘
怎样使用 Go 语言。别的还有一份《三日入门》的教程可供参照 : 第一日 ,第二日 , 第三日 .
本文将会以一系列适合的程序来说明语言的一些重点特征。全部的示例程序都是可运转的(在撰写本文时),而且这些程序都会提交到版本库的 /doc/progs/ 目录下。
程序片段都会标明上在源文件中的行号,为了清楚起见,空行前方的行号留空。
Hello, World
让我们以最常有的方式开始吧 :
05 package main
07 import fmt "fmt" // 本包实现了格式化输入输出
09 func main() {
10 fmt.Printf("Hello, world; or Καλημ ?ραこんにκち?はσμε ; or
世界 /n");
11 }
每份 Go 的源文件都会使用 package 语句申明它的包名。同时也能够经过导入其余包来使用此中定义的功能。 这段代码导入了包 fmt 来调用我们的老朋友 —— 此刻它的开头字母是大写的,而且前方带有包名限制 —— fmt.Printf 。
函数的申明使用重点字 func ,整个程序将会从为 main 包中的 main 函数开始(经过初始化以后)。
字符串常量能够包括 Unicode 字符,采纳 UTF-8 编码。(事实上,全部 Go 程序的源文件都是使用 UTF-8 编码的)说明的方式同 C++ 相同:
/* ... */
// ...
稍后,我们会持续谈到 print 。
编译
Go 是一个编译型语言。目前有两个编译器,此中 gccgo 编译器采纳
了 GCC 作为后端,别的还有一系列依据其所合用的架构命名的编译
器,比如 6g 合用于 64 位的 x86 结构,8g 合用于 32 位的 x86 结构,等等。这些编译器比 gccgo 运转的更快、生成的代码更为有效率。在撰写本文的时候 (2009 年末),他们还拥有一个更为强健的运转期系统,可是 gccgo 也正在迎头追上。
下边来看看怎样编译和运转程序。采纳 6g 是这样的
# 编译 ; 中间代码位于 中
# 链接;
输出至
Hello, world; or
Καλημ
?ραこκんに?σμεちは
;世or界
$
gccgo 的方式看起来更为传一致些。
Hello, world; or Καλημ ?ραこκんに?σμεちは ;世or界
$
Echo
下一步,是来实现一个 Unix 的传统命令 Echo :
05 package main
07
import (
08
"os";
09
"flag"; // command line option parser
10
)
var omitNewline = flag.Bool("n", false, "don't print final newline")
const (
Space = " ";
Newline = "/n";
)
19
func main() {
20
flag.Parse(); // Scans the arg list and sets up flags
var s string = "";
for i := 0; i < flag.NArg(); i++ {
23
if i > 0 {
24
s += Space
25
}
26
s += flag.Arg(i);
}
if !*omitNewline {
29 s += Newline
}
os.Stdout.WriteString(s);
}
这段程序很小,可是却有几个特别之处。前方这个例子中,我们看到
能够使用 func 来申明一个函数, 同时重点字 var 、const 和 type (目
前还没实用到)也能够用于申明,就仿佛 import 相同。注意,我们
能够将同一类的申明放到括号中,以分号分开,比如第 7-10 行和第
14-17 行。但也并不是必定要这样,比如能够这样写
const Space = " "
const Newline = "/n"
分号在此处其实不是一定的。 事实上,任何顶层申明后边都不需要分号。
但假如假如在一个括号内进行一系列的申明, 就需要用分号来切割了。
你能够像在 C、C++ 或 Java 中那样去使用分号