2010-03-31 Go 编程语言入门教程
原文:http://golang.org 翻译:刘金雨 http://log4think.com
介绍
本文档是关于Go编程语言基础的一个介绍性的入门教程,偏向于熟悉C或C++的读者。本文并非一份语言的完整指南,如果需要的话可以参考语言规范。读完本教程之后,你可以继续学习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的源文件都会使用
语句声明它的包名。同时也可以通过导入其它包来使用其中定义的功能。这段代码导入了包
来调用我们的老朋友--现在它的开头字母是大写的,并且前面带有包名限定
。
函数的声明使用关键字func,整个程序将会从为
包中的
函数开始(经过初始化之后)。
字符串常量可以包含Unicode字符,采用UTF-8编码(事实上,所有Go程序的源文件都是使用UTF-8编码的)。
注释的方式同C++一样:
或
稍后我们会继续提到
。
编译
Go是一个编译型语言。目前有两个编译器,其中
编译器采用了GCC作为后端,此外还有一系列根据其所适用的架构命名的编译器,例如
适用于64位的x86结构,8g 适用于32位的x86结构,等等。这些编译器比gccgo运行的更快、生成的代码更加有效率。在撰写本文的时候(2009年底),他们还具有一个更加健壮的运行期系统,但是gccgo也正在迎头赶上。
下面来看看如何编译和运行程序。采用
是这样的
的方式看起来更加传统一些。
Echo
下一步,来实现一个Unix的传统命令Echo:
这段程序很小,但是却有几个新出现的概念。前面这个例子中,我们看到可以使用
来声明一个函数,同时关键字
和
目前还没有用到)也可以用于声明,就好像
一样。
注意,我们可以将同一类的声明放到括号中,以分号分隔。例如第7-10行和第14-17行。但也并非一定要如此,例如可以这样写
echo
for
Stdout
Stdout
*os.File
import
fmt
fmt
import "fmt"
os.Stdout
WriteString
实 际flag
-n
omitNewline
main.main
var
:=
for
flag
for
while
do
if
switch
for
s
-n
main.main
main.main
os
os.Args
flag
int
float
int8
float64
uint
uint32
int
int32
byte
uint8
string
byte
strings.go
const
arrayOfInt
arrayOfInt
a[low : high]
low
high-1
[]
[10]
sum.go
sum()
[3]int{1,2,3}
&
sum()
...
&
sum还第一次出现 了
len(),用于返回元素数量。
for
range
int
struct
new()
make()
nil
make()
new(T)
*T
make(T)
T
new()
0LL
0x0UL
ints
ints
floats
file.go
file
os
syscall
type
File
File
File
File
File
File
File
*File
newFile
Open
Open
File
syscall.Open
r
e
int
syscall
File
syscall.Open
r
NewFile
nil
os
Open
errno
os.Errno
os.Error
Files
*File
file
this
struct
struct
structs
String
os.EINVAL
os.Error
EINVAL
os
./
./file
file
cat(1)
progs/cat.go
switch
for
if
switch
switch
nr
er
f.Read()
if
switch
switch
true
for
true
switch
if-else
switch
case
break
Write()
cat
rot13
cat()
f
Read()
String()
progs/cat_rot13.go
reader
file.File
reader
cat
reader
*file.File
reader
reader
rot13
reader
rot13
cat()
main
cat()
rot13
reader
rotate13
reader
*reader
struct
rot13
file.File
reader
writer
progs/sort.go
Interface
Sort
Len
Less
Swap
sort
int
struct
progs/sortmain.go
sort
fmt
Printf
Fprintf
fmt
Printf
...
stdarg.h
interface {}
Printf
Printf
%llud
%d
Printf
%v
Println
Printf
%v
Println
Printf
Printf
String()
*testType
String()
String()
Sprint
fmt
Printf
%T
Printf
String()
v
v.(Stringer)
v
Stringer
s
ok
true
ok
Stringer
Printf
Sprintf
Fprintf
Fprintf
io.Writer
io
Write
io.Reader
io.ReadWriter
Fprintf
Write()
make
progs/sieve.go
generate
ch
<-
ch
filter
<-
go
generate
filter
ch
generate
progs/sieve1.go
ch
generate
filter
sieve
main
request
binOp
server
N
main
quit
server
server
select
select
quit
``` channel at the end of main:
关于Go编程和并发程序设计还有许多其它的内容,但这份快速入门教程应该已经给你提供了一点基础知识。
最后更新于
这有帮助吗?