额,梳理了一下发现只是翻译了一下文档。。罢了罢了。
workspace:
go项目工作目录,包含src和bin
src文件夹包含源文件,主要是项目用到的代码仓库,代码仓库里又有若干个package,每个package里是若干个go文件
bin文件夹包含编译后的二进制文件,文档称之为Command
$GOPATH环境变量:指向workspace目录地址,Unix下默认为$HOME/go。
go env GOPATH 命令可以打印当前GOPATH目录地址,我们可以通过:
export GOPATH=$(go env GOPATH)
将当前workspace绑定到GOPATH环境变量。
import path:要引入的package的路径字符串
一种是package在workspace中的位置
一种是远程仓库地址:" github.com/user/xxx
" (官方推荐的方式)
而标准库的package可以直接引用其名称,如"fmt"、"net/http"
编写程序:
1.创建程序所在目录:
mkdir $GOPATH/src/github.com/user/hello
2.创建文件,hello.go
package main
import "fmt"
func main() {
fmt.Println("Hello, kat.")
}
3.go install编译程序,编译后会添加到bin目录下
go install github.com/user/hello
4.执行程序:
$GOPATH/bin/hello
编写lib:
1.创建lib目录
mkdir $GOPATH/src/github.com/user/stringutil
2.添加文件reverse.go:
// Package stringutil contains utility functions for working with strings.
package stringutil
// Reverse returns its argument string reversed rune-wise left to right.
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)
}
3.build该文件
go build github.com/user/stringutil
之后程序就可以直接引用了:
package main
import (
"fmt"
"github.com/user/stringutil"
)
func main() {
fmt.Println(stringutil.Reverse("!oG ,olleH"))
}
》》》》》》》》》》》》》》》》》》》》》》》》》》
go的源文件,顶部第一行必须有一个:
package name
比如上面的编写的lib,package name是 stringutil
执行文件必须是 package main
测试:
go自带一个轻量的测试框架,由go test 程序和testing package组成。
当我们写一个go的测试文件时:
1.文件名为xxx_test.go
2.文件包含若干函数,名为Testxxx,传入的参数为(t *testing.T)
3.go的test框架会分别跑这些函数,如果报错,则测试失败。
4.一个package的目录下往往有一个对应的测试文件。
比如给上边的stringutil创建测试文件:
1.在$GOPATH/src/github.com/user/stringutil目录下创建reverse_test.go。
2.测试文件代码:
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)
}
}
}
3.执行go test:
go test github.com/user/stringutil
//输出:
ok github.com/user/stringutil 0.153s
远程的package:
引入文件时,go的import path可以通过版本控制系统如git去获取那些package的源码,因而go的工具可以借助这个特性自动获取远程的package。如果我们的import path包含一个远程仓库的url,go会自动执行go get获取对应的package,并执行go build、go install。
$ go get github.com/golang/example/hello
$ $GOPATH/bin/hello
//输出:
Hello, Go examples!
如果要获取的包不在workspace中,go get 加载后会将之放在/src目录下,并自动执行build、install命令。
如果要获取的包已经在workspace中,go get 会跳过远程获取阶段,直接执行install。