Go 学习
工作空间
- 包含三个子目录
src目录包含Go的源文件,它们被组织成包(每个目录都对应一个包)pkg目录包含包对象bin目录包含可执行命令
GOPATH环境变量
-
在
~/.profile中加入export GOPATH=$HOME/gowork export PATH=$PATH:$GOPATH/bin-
但是后面直接运行
go install时候报错,找不到bin-
解决:在
~/.profile中直接加入export GOBIN=$PATH:$GOPATH/bin
-
-
-
执行配置
source $HOME/.profile
创建第一个程序并运行
-
创建相应的包目录
$ mkdir $GOPATH/src/github.com/user/hello -
在该目录下创建名为
hello.go的文件,其代码为package main import "fmt" func main() { fmt.Printf("Hello, world.\n") } -
用go工具构建并安装此程序
-
系统任何地方都可以运行,go工具会根据GOPATH指定的工作空间,在
github.com/user/hello包内查找源码go install github.com/user/hello -
若在包目录下运行
go install,可以省略包路径$ cd $GOPATH/src/github.com/user/hello $ go install此命令会构建
hello命令,产生一个可执行的二进制文件。 接着它会将该二进制文件作为hello(在 Windows 下则为hello.exe)安装到工作空间的bin目录中
-
-
运行程序
-
输入完整路径运行
$ $GOPATH/bin/hello Hello, world. -
如果
$GOPATH/bin添加到PATH中了,只需输入该二进制文件名即可$ hello Hello, world.
-
-
新建本地仓库并将代码推到远程仓库
-
初始化仓库
git init -
添加到缓存区
git add * -
添加备注,可以用于版本回退
git commit -m "something change" -
关联远程仓库
git remote add origin github.com/user/project -
推送代码到远程仓库
git push -u origin master
-
创建一个库
-
选择包路径(使用
github.com/user/stringutil) 并创建包目录:$ mkdir $GOPATH/src/github.com/user/stringutil -
在目录中创建名为
reverse.go文件,内容如下// stringutil contain a function which is used to handle string package stringutil // reverse the string 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文件使用它package main import ( "fmt" "github.com/user/stringutil" ) func main() { fmt.Printf(stringutil.Reverse("!oG ,olleH")) } -
运行
hello.go无论是安装包还是二进制文件,
go工具都会安装它所依赖的任何东西。 因此当我们通过$ go install github.com/user/hello来安装
hello程序时,stringutil包也会被自动安装。运行此程序的新版本,你应该能看到一条新的,反向的信息:
$ hello Hello, Go! -
包名
Go源文件中的第一个语句必须是
package 名称这里的 名称 即为导入该包时使用的默认名称。 (一个包中的所有文件都必须使用相同的 名称。)
Go的约定是包名为导入路径的最后一个元素:作为 “
crypto/rot13” 导入的包应命名为rot13。可执行命令必须使用
package main。链接成单个二进制文件的所有包,其包名无需是唯一的,只有导入路径(它们的完整文件名) 才是唯一的。
测试
-
Go拥有一个轻量级的测试框架,它由
go test命令和testing包构成。 -
你可以通过创建一个名字以
_test.go结尾的,包含名为TestXXX且签名为func (t *testing.T)函数的文件来编写测试。 测试框架会运行每一个这样的函数;若该函数调用了像t.Error或t.Fail这样表示失败的函数,此测试即表示失败。 -
我们可通过创建文件
$GOPATH/src/github.com/user/stringutil/reverse_test.go来为stringutil添加测试,其内容如下:package stringutil import "testing" func TestReverse(t *testing.T) { cases := []struct { in, want string }{ {"Hello, world", "dlrow ,olleH"}, {"Hello, 世界", "界世 ,olleH"}, {"", ""}, } for _, c := range cases { got := Reverse(c.in) if got != c.want { t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want) } } } -
接着使用
go test运行该测试:$ go test github.com/user/stringutil-
同样,若你在包目录下运行
go工具,也可以忽略包路径$ go test
-
789

被折叠的 条评论
为什么被折叠?



