主要介绍如下几个方面:
go的包管理和介绍go工具,标准的方式拉取和构建包和命令。
go的工具要求以指定的一种方式组织代码
工作空间是目录层次结构,其根目录有两个目录
go工具会生成二进制文件并将其安装到bin目录。
src子目录通常包含多个版本控制的库比如如下:
bin/
hello # command executable
outyet # command executable
src/
github.com/golang/example/
.git/ # Git repository metadata
hello/
hello.go # command source
outyet/
main.go # command source
main_test.go # test source
stringutil/
reverse.go # package source
reverse_test.go # test source
golang.org/x/image/
.git/ # Git repository metadata
bmp/
reader.go # package source
writer.go # package source
... (many more repositories and packages omitted) ...
上面的树目录展示了工作区间包含2个库(example和image)
gopath环境变量指定了你工作区间的位置,默认是home目录下的go目录,eg:/home/go。
比如unix环境:$HOME/go
windows环境:
C:\Users\YourName\go
如果你想改下不同的工作环境,可以通过set GOPATH来设置,但是注意的事项是设置的工作目录不要和安装目录一致。
为了便利,如果是unix环境可以这么设置下:
export PATH=$PATH:$(go env GOPATH)/bin
或者通过如下命令设置
export GOPATH=$(go env GOPATH)
更多的gopath环境变量命令可以参考这里:点击
mkdir -p $GOPATH/src/github.com/user
比如以github.com/user项目作为路径,则在项目中通过关键字import则可以引入相关路径
在项目目录下创建一个hello目录
mkdir $GOPATH/src/github.com/user/hello
写一个hello.go文件
package main
import "fmt"
func main() {
fmt.Println("Hello, world.")
}
现在构建下和用go工具安装下
go install github.com/user/hello
注意,从系统上的任何位置运行此命令。 go工具都可以通过在GOPATH指定的工作区中查找github.com/user/hello包来查找源代码。
当然也可以找到项目目录去进行install操作:
cd $GOPATH/src/github.com/user/hello
$ go install
上面的命令也会生成一个可以执行的二进制文件可以到$HOME/go/bin/hello目录下获取到
$GOPATH/bin/hello
Hello, world.
如果添加$GOPATH/bin到你的路径,那么可以直接拼写名字
$ hello
Hello, world.
如何通过git提交数据到git仓库
$ cd $GOPATH/src/github.com/user/hello
$ git init
Initialized empty Git repository in /home/user/go/src/github.com/user/hello/.git/
$ git add hello.go
$ git commit -m "initial commit"
[master (root-commit) 0b4507d] initial commit
1 file changed, 7 insertion(+)
create mode 100644 hello.go
可以自己创建一个文件夹目录
mkdir $GOPATH/src/github.com/user/stringutil
现在创建一个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)
}
现在测试下包的编译通过go build
go build github.com/user/stringutil
或者直接到目录下github.com/user/stringutil
go build
然后到原来的hello.go文件的目录编写如下代码:
package main
import (
"fmt"
"github.com/user/stringutil"
)
func main() {
fmt.Println(stringutil.Reverse("!oG ,olleH"))
}
构建hello程序
go install github.com/user/hello
运行程序
hello
Hello, Go!
操作完上面的步骤,目前你项目的目录结构如下可以对比下:
bin/
hello # command executable
src/
github.com/user/
hello/
hello.go # command source
stringutil/
reverse.go # package source
包名称:
包名必须是第一行,如果想要变成可执行的包,那么必须是main包。
不要求所有包名唯一,但是导入的时候必须包名唯一。
go有个轻量级的测试框架,通过go test命令测试testing包
可以通过这样命名来写_test.go,函数名TestXXX和功能函数func (t *testing.T)。比如现在创建如下的文件。
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 github.com/user/stringutil
如果已经在ithub.com/user/stringutil目录下则可以直接执行
go test
假设现在想要用个远程包
则可以通过go get命令,获取构建并且自动安装,比如如下的例子:
$ go get github.com/golang/example/hello
$ $GOPATH/bin/hello
Hello, Go examples!
现在的目录结构如下:
bin/
hello # command executable
src/
github.com/golang/example/
.git/ # Git repository metadata
hello/
hello.go # command source
stringutil/
reverse.go # package source
reverse_test.go # test source
github.com/user/
hello/
hello.go # command source
stringutil/
reverse.go # package source
reverse_test.go # test source
使用的时候直接导入就可以了
import "github.com/golang/example/stringutil"
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。