Go简单开始

Go是一门编译型语言,Go语言的工具链将源代码及其依赖转换成计算机的机器指令2。Go语
言提供的工具都通过一个单独的命令 go 调用, go 命令有一系列子命令。最简单的一个子命
令就是run。这个命令编译一个或多个以.go结尾的源文件,链接库文件,并运行最终生成的可
执行文件。

执行go文件:

1
go run file_name.go

如果不只是一次性实验,你肯定希望能够编译这个程序,保存编译结果以备将来之用。可以
用build子命令:

1
go build helloworld.go

这个命令生成一个名为helloworld的可执行的二进制文件3,之后你可以随时运行它4,不需任
何处理。

可以从gopl.io网站上本书源码仓库
里获取代码:

1
go get gopl.io/ch1/helloworld

在当前目录下得到bin和src文件

1
2
3
4
5
6
7
8
9
10
11
12
package main

import (
"fmt"
)

func main() {
name := "eatrice"
go func(){
fmt.Printf("hello, %s.\n", name)
}()
}

上述语句的输出结果本来应该是hello eatrice,但是执行结果却没有任何显示。这充分显示了Go语句的并发性,Go函数执行与其他的语句是并发,由于Go包装过程需要时间,所以,在main函数完成之前,Go语句还没来得及执行,就已经退出main函数了,因此执行没有结果。

通过对比下列的代码,我们可知,可采用runtime.Gosched()方式来保证Go语句的运行,。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import (
"fmt"
"runtime"
)

func main() {
name := "eatrice"
go func(){
fmt.Printf("hello, %s.\n", name)
}()
runtime.Gosched()
name = "harry"
}

输出是hello eatrice

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import (
"fmt"
"runtime"
)

func main() {
name := "eatrice"
go func(){
fmt.Printf("hello, %s.\n", name)
}()
name = "harry"
runtime.Gosched()
}

输出是:hello harry

参考:
Go语言圣经
Go并发编程实战