课程网址:服务计算 - 云应用开发方法、技术与架构
作业网址:安装 go 语言开发环境
学习资料:如何使用Go编程
1.你的第一个程序
- 要编译并运行简单的程序,首先要选择包路径(我们在这里使用 github.com/user/hello),并在你的工作空间内创建相应的包目录:
$ mkdir $GOPATH/src/github.com/user/hello
-
接着,在该目录中创建名为 hello.go 的文件,其内容为以下Go代码:
package main
import “fmt”
func main() {
fmt.Printf(“Hello, world.\n”)
}
- 现在你可以用 go 工具构建并安装此程序了:
- 注意,你可以在系统的任何地方运行此命令。go 工具会根据 GOPATH 指定的工作空间,在 github.com/user/hello 包内查找源码。
若在从包目录中运行 go install,也可以省略包路径:
- 此命令会构建 hello 命令,产生一个可执行的二进制文件。 接着它会将该二进制文件作为 hello(在 Windows 下则为 hello.exe)安装到工作空间的 bin 目录中。 在我们的例子中为 $GOPATH/bin/hello,具体一点就是 $HOME/go/bin/hello。
go 工具只有在发生错误时才会打印输出,因此若这些命令没有产生输出, 就表明执行成功了。 - 现在,你可以在命令行下输入它的完整路径来运行它了:
$ $GOPATH/bin/hello
Hello, world.
- 若你已经将 $GOPATH/bin 添加到 PATH 中了,只需输入该二进制文件名即可:
$ hello
Hello, world.
- 若你使用源码控制系统,那现在就该初始化仓库,添加文件并提交你的第一次更改了。 再次强调,这一步是可选的:你无需使用源码控制来编写Go代码。
$ cd $GOPATH/src/github.com/user/hello
$ git init
Initialized empty Git repository in /home/user/work/src/github.com/user/hello/.git/
$ git add hello.go
$ git commit -m "initial commit"
[master (root-commit) 0b4507d] initial commit
1 file changed, 1 insertion(+)
create mode 100644 hello.go
2.你的第一个库
让我们编写一个库,并让 hello 程序来使用它。
- 同样,第一步还是选择包路径(我们将使用 github.com/user/stringutil) 并创建包目录:
$ mkdir $GOPATH/src/github.com/user/stringutil
- 接着,在该目录中创建名为 reverse.go 的文件,内容如下:
// stringutil 包含有用于处理字符串的工具函数。
package stringutil
// Reverse 将其实参字符串以符文为单位左右反转。
func Reverse(s string) string {
r := []rune(s)
for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]
}
return string(r)
}
- 现在用 go build 命令来测试该包的编译:
$ go build github.com/user/stringutil
- 当然,若你在该包的源码目录中,只需执行:
$ go build
- 即可。这不会产生输出文件。想要输出的话,必须使用 go install 命令,它会将包的对象放到工作空间的 pkg 目录中。
- 确认 stringutil 包构建完毕后,修改原来的 hello.go 文件(它位于 $GOPATH/src/github.com/user/hello)去使用它:
package main
import (
"fmt"
"github.com/user/stringutil"
)
func main() {
fmt.Printf(stringutil.Reverse("!oG ,olleH"))
}
- 无论是安装包还是二进制文件,go 工具都会安装它所依赖的任何东西。 因此当我们通过
$ go install github.com/user/hello
- 来安装 hello 程序时,stringutil 包也会被自动安装。
- 运行此程序的新版本,你应该能看到一条新的,反向的信息:
$ hello
Hello, Go!
- 做完上面这些步骤后,你的工作空间应该是这样的:
bin/
hello # 可执行命令
pkg/
linux_amd64/ # 这里会反映出你的操作系统和架构
github.com/user/
stringutil.a # 包对象
src/
github.com/user/
hello/
hello.go # 命令源码
stringutil/
reverse.go # 包源码
- 注意 go install 会将 stringutil.a 对象放到 pkg/linux_amd64 目录中,它会反映出其源码目录。 这就是在此之后调用 go 工具,能找到包对象并避免不必要的重新编译的原因。 linux_amd64 这部分能帮助跨平台编译,并反映出你的操作系统和架构。
- Go的可执行命令是静态链接的;在运行Go程序时,包对象无需存在。