前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go的代码写作规范

go的代码写作规范

作者头像
小诚信驿站
发布2019-11-18 20:29:12
7380
发布2019-11-18 20:29:12
举报

一、介绍:

主要介绍如下几个方面:

go的包管理和介绍go工具,标准的方式拉取和构建包和命令。

go的工具要求以指定的一种方式组织代码

二、代码管理:

目录大纲:

  1. go项目程序员通常喜欢将所有代码放在一个单一的工作空间内。
  2. 工作空间包含许多版本库
  3. 每个库包含一个或者多个包
  4. 每个包包含一个或者多个go源码文件
  5. 包的目录路径决定了导入的路径。

工作区间:

工作空间是目录层次结构,其根目录有两个目录

  • src包含go源文件
  • bin包含可执行文件

go工具会生成二进制文件并将其安装到bin目录。

src子目录通常包含多个版本控制的库比如如下:

代码语言:javascript
复制
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环境变量

gopath环境变量指定了你工作区间的位置,默认是home目录下的go目录,eg:/home/go。

比如unix环境:$HOME/go

windows环境:C:\Users\YourName\go

如果你想改下不同的工作环境,可以通过set GOPATH来设置,但是注意的事项是设置的工作目录不要和安装目录一致。

为了便利,如果是unix环境可以这么设置下:

代码语言:javascript
复制
export PATH=$PATH:$(go env GOPATH)/bin

或者通过如下命令设置

代码语言:javascript
复制
export GOPATH=$(go env GOPATH)

更多的gopath环境变量命令可以参考这里:点击

导入路径

代码语言:javascript
复制
 mkdir -p $GOPATH/src/github.com/user

比如以github.com/user项目作为路径,则在项目中通过关键字import则可以引入相关路径

写一个程序比如helloworld

在项目目录下创建一个hello目录

代码语言:javascript
复制
mkdir $GOPATH/src/github.com/user/hello

写一个hello.go文件

代码语言:javascript
复制
package main

import "fmt"

func main() {
	fmt.Println("Hello, world.")
}

现在构建下和用go工具安装下

代码语言:javascript
复制
go install github.com/user/hello

注意,从系统上的任何位置运行此命令。 go工具都可以通过在GOPATH指定的工作区中查找github.com/user/hello包来查找源代码。

当然也可以找到项目目录去进行install操作:

代码语言:javascript
复制
cd $GOPATH/src/github.com/user/hello
$ go install

上面的命令也会生成一个可以执行的二进制文件可以到$HOME/go/bin/hello目录下获取到

代码语言:javascript
复制
$GOPATH/bin/hello
Hello, world.

如果添加$GOPATH/bin到你的路径,那么可以直接拼写名字

代码语言:javascript
复制
$ hello
Hello, world.

如何通过git提交数据到git仓库

代码语言:javascript
复制
$ 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

第一个库

可以自己创建一个文件夹目录

代码语言:javascript
复制
mkdir $GOPATH/src/github.com/user/stringutil

现在创建一个reverse.go包含以下内容:

代码语言:javascript
复制
// 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

代码语言:javascript
复制
go build github.com/user/stringutil

或者直接到目录下github.com/user/stringutil

代码语言:javascript
复制
go build

然后到原来的hello.go文件的目录编写如下代码:

代码语言:javascript
复制
package main

import (
	"fmt"

	"github.com/user/stringutil"
)

func main() {
	fmt.Println(stringutil.Reverse("!oG ,olleH"))
}

构建hello程序

代码语言:javascript
复制
go install github.com/user/hello

运行程序

代码语言:javascript
复制
hello
Hello, Go!

操作完上面的步骤,目前你项目的目录结构如下可以对比下:

代码语言:javascript
复制
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)。比如现在创建如下的文件。

代码语言:javascript
复制
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)
		}
	}
}
代码语言:javascript
复制
go  test github.com/user/stringutil
如果已经在ithub.com/user/stringutil目录下则可以直接执行
go test

go的其他测试文档

四、远程包

假设现在想要用个远程包

则可以通过go get命令,获取构建并且自动安装,比如如下的例子:

代码语言:javascript
复制
$ go get github.com/golang/example/hello
$ $GOPATH/bin/hello
Hello, Go examples!

现在的目录结构如下:

代码语言:javascript
复制
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

使用的时候直接导入就可以了

代码语言:javascript
复制
import "github.com/golang/example/stringutil"

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、介绍:
  • 二、代码管理:
    • 目录大纲:
      • 工作区间:
        • GOPATH环境变量
          • 导入路径
            • 写一个程序比如helloworld
              • 第一个库
              • 三、测试
              • 四、远程包
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档