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 中那样去使用分号