Post

Go 第一章

这部分内容简直是把我搞得欲仙欲死,安装完pkg包以后,为了方便,把这部分内容加入到环境变量中:

1
2
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin

注意这里我是在我的用户目录下建立了一个go的文件夹用来开发,这些内容在文档中都被标记为不必要,但是一定这么做,否则找问题太痛苦了.我也按照文档中创建了目录,方便我提交代码.在我的用户名下面创建一个文件夹,名字是hello,然后在这个文件夹内再创建一个hello.go的源文件.创建以下代码

1
2
3
4
5
package main
import "fmt"
func main() {
    fmt.Printf("hello, go\n");
}

能运行的话就得保证至少存在一个包名是main的.这个时候可以直接使用go run hello.go来直接运行,也可以编译好了之后运行,命令忽略src这层路径go install info.haoxiqiang/first/hello,也可以直接在源码一级目录执行go install.运行成功的表现就是没有报错信息….同时在go/bin中生成了可执行文件,我们可以直接执行,比如进入到bin,然后hello,或者在任意位置,换一个姿势$GOPATH/bin/hello.

第二节 library

在一般的项目中,我们经常使用一些工具类,或者第三库,下面展示一下基本的go library的用法

1
2
mkdir $GOPATH/go/src/info.haoxiqiang/tool/stringutil
vi util1.go
1
2
3
4
5
6
7
8
package stringutil
func Reverse(s string) string{
	r:=[]rune(s);
	for i,j := 0,len(s)-1; i<len(s)/2 ; i,j =i+1,j-1 {
		r[i],r[j] = r[j],r[i];
	}
	return string(r);
}

需要注意的包名为引用位置调用的名字,调用方式为

1
2
3
4
5
6
7
package main
import (
	"fmt"
	"info.haoxiqiang/tool/stringutil")
func main() {
    fmt.Printf(stringutil.Reverse("123456789\n"));
}

第三节 go test

go本身有一个轻量的test框架,使用起来也很简单,直接上代码,建立测试文件的时候建议直接xxx_test.go的样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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)
		}
	}
}
1
2
➜  go git:(master) ✗ go test info.haoxiqiang/tool/stringutil
ok  	info.haoxiqiang/tool/stringutil	0.005s

第四节

go支持远程的包,我们可以直接使用一些golang的样例,比如

1
$ go git:(master) ✗ go get github.com/golang/example/hello

这样就会在你本地src下面直接创建这些路径以及内部文件,这个时候在执行$GOPATH/bin/hello就是示例的模样了Hello, Go examples! 我们也可以直接在import中使用,go会自动抓取,构建,安装.

1
2
3
import (
	"fmt"
	"github.com/golang/example/stringutil")
1
2
3
➜  go git:(master) ✗ go get info.haoxiqiang/first/hello
➜  go git:(master) ✗ go install  info.haoxiqiang/first/hello
➜  go git:(master) ✗ bin/hello

源码 https://github.com/Haoxiqiang/go-practise

This post is licensed under CC BY 4.0 by the author.