博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go工程组织规范
阅读量:4586 次
发布时间:2019-06-09

本文共 3166 字,大约阅读时间需要 10 分钟。

go编码以workspace形式管理,一个workspace包含所有的Go编码,包含多个版本控制仓库(例如使用git管理的多个仓库)。每个仓库包含多个包package,每个package是一个单独的路径,包含所有go源码,包的路径就是包的导入路径(import path)。

Workspace

Workspace作为根目录,包含两个目录src和bin。bin包含可执行文件,src包含源码。典型的src包含多个版本控制仓库(记录源码开发过程)。形如:

 

上面的workspace包含两个仓库example和image。example包含两个命令(或包,hello和outyet)和一个库(或包,stringutil)。

$GOPATH指向当前的Workspace。

包的导入路径(import path),指定一个包在workspace或远程仓库的位置。标准库的导入路径可以简写,如“fmt”和“net/http”。但自有库的包的导入路径应该是绝对路径(src下级路径开始),包含基础路径(如:github.com/user)。可通过go help importpath获取更多导入路径的信息。

go源码的第一有效行(注释行除外)必须是

package name

name是导入路径(import path)的默认包名。在一个包中所有文件必须用相同包名,惯例:导入路径名的最后一项应与包名相同,以方便识别和记忆,不出错。

一个程序只有一个main包,一个包中只能有一个main函数,不能重复定义。

对一个可执行程序,不要求package名唯一,但要求导入路径唯一(即可明确确认一个包)。

go程序导出名字

在 Go 中,任何以大写字母开头的变量或者函数都是被导出的名字。其它包只能访问被导出的函数和变量。

同一个包中,所有变量和函数都可调用,无论首字母是否大小写。

first程序

用自己的github账号创建仓库路径:$GOPATH/src/github.com/yuxi-o/golang,此目录下创建包目录hello,然后在hello目录下创建hello.go程序。

目前hello.go路径为:src/github.com/yuxi-o/golang/hello/hello.go。

现在运行如下命令安装hello.go程序:

$go install github.com/yuxi-o/golang/hello

注意:go install或go build执行的路径为package路径,可执行程序名为包路径名。

可采用git管理yuxi-o/golang仓库,在golang目录下:

~/go/src/github.com/yuxi-o/golang$ lshello~/go/src/github.com/yuxi-o/golang$ git initInitialized empty Git repository in /home/wang/go/src/github.com/yuxi-o/golang/.git/~/go/src/github.com/yuxi-o/golang$ git add .~/go/src/github.com/yuxi-o/golang$ git commit -m "first go program"[master (root-commit) bd2635a] first go program 1 file changed, 6 insertions(+) create mode 100644 hello/hello.go

 

first库

mkdir $GOPATH/src/github.com/yuxi-o/golang/stringutilcat ~/go/src/github.com/yuxi-o/golang/stringutil/reverse.go package stringutilfunc 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 github.com/yuxi-o/golang/stringutil

注:go build编译库不会输出文件,保存编译包到local build cache。

cat ~/go/src/github.com/yuxi-o/golang/hello/hello.go package mainimport (    "fmt"    "github.com/yuxi-o/golang/stringutil")func main() {//    fmt.Println("Hello, Go world")    fmt.Println(stringutil.Reverse("!oG, olleH"))}$go install github.com/yuxi-o/golang/hello

现在目录如下:

go测试

go提供轻量级测试框架,包含go test和testing package。

go测试文件命令为_test.go,测试函数定义:func TestXXX(t *testing.T)。test框架运行每个测试函数。假如测试失败,返回t.Error或t.Fail。

cat ~/go/src/github.com/yuxi-o/golang/stringutil/reverse_test.go package stringutilimport "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, wang %q", c.in, got, c.want) } }}$ go test github.com/yuxi-o/golang/stringutilok github.com/yuxi-o/golang/stringutil 0.002s

Remote包

导入路径可以描述怎样获取package源码(通过git或mercurial)。go get可以fetch、build和install包,若包不存在,go get会下载包到第一个workspace。可下载golang/example测试:

$ go get github.com/golang/example/hello$ $GOPATH/bin/helloHello, Go examples!

 

参考:

1.  

2. 提供go在线测试环境和文档

3. go相关文档

4. go标准库

5.

转载于:https://www.cnblogs.com/embedded-linux/p/10878049.html

你可能感兴趣的文章
css遮罩层与fixed
查看>>
HTML5 Input 类型
查看>>
linux c语言 select函数用法 分类: arm-linux-...
查看>>
浏览网页出现右键查看源代码无效时
查看>>
动态生成的元素绑定KindEditor
查看>>
03--maven4myeclipse配置
查看>>
关于datatable的数据绑定问题
查看>>
c#函数中处理对象的问题
查看>>
转 top、postop、scrolltop、offsetTop、scrollHeight、offsetHeight、clientHeight
查看>>
2017-12-27练习
查看>>
NET设计规范(二) 命名规范
查看>>
VMware 9.0.1安装Mac OS X Mountain Lion 10.8.2
查看>>
SSL延迟
查看>>
android新手关于左右滑动的问题,布局把<android.support.v4.view.ViewPager/><ImageView/> 放在上面就不行了。...
查看>>
python第二十一天---昨天没写完作业
查看>>
爬虫基础--IO多路复用单线程异步非阻塞
查看>>
Johnny Solving CodeForces - 1103C (构造,图论)
查看>>
oracle数据库自学笔记(持续更新中……)
查看>>
BZOJ3685: 普通van Emde Boas树
查看>>
Jquery 操作Cookie
查看>>