实现一个go项目

额,梳理了一下发现只是翻译了一下文档。。罢了罢了。

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。

猜你喜欢

转载自blog.csdn.net/weixin_36094484/article/details/82350725