第一节 hello,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