专栏首页小诚信驿站go的代码写作规范

go的代码写作规范

一、介绍:

主要介绍如下几个方面:

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

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

二、代码管理:

目录大纲:

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

工作区间:

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

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

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

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

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环境可以这么设置下:

export PATH=$PATH:$(go env GOPATH)/bin

或者通过如下命令设置

export GOPATH=$(go env GOPATH)

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

导入路径

 mkdir -p $GOPATH/src/github.com/user

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

写一个程序比如helloworld

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

mkdir $GOPATH/src/github.com/user/hello

写一个hello.go文件

package main

import "fmt"

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

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

go install github.com/user/hello

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

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

cd $GOPATH/src/github.com/user/hello
$ go install

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

$GOPATH/bin/hello
Hello, world.

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

$ hello
Hello, world.

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

$ 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

第一个库

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

mkdir $GOPATH/src/github.com/user/stringutil

现在创建一个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)
}

现在测试下包的编译通过go build

go build github.com/user/stringutil

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

go build

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

package main

import (
	"fmt"

	"github.com/user/stringutil"
)

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

构建hello程序

go install github.com/user/hello

运行程序

hello
Hello, Go!

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

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)。比如现在创建如下的文件。

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

go的其他测试文档

四、远程包

假设现在想要用个远程包

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

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

现在的目录结构如下:

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

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

import "github.com/golang/example/stringutil"

原文链接:https://golang.org/doc/code.html

原文作者:go官网

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Go的代码规范指南-新人必看

    环境设置:*nix环境或者Mac环境,安装go语言目录,默认是usr/local/go,如果想要让代码运行,需要将项目放到usr/local/go/src目录下...

    小诚信驿站
  • Gin-Web-Framework官方指南中文(上篇)

    Gin是一个用Golang写的HTTP web框架。它具有类似于Martini的API,性能更高-快40倍。 如果需要很好的性能,那么肯定是推荐现在使用Gin。

    小诚信驿站
  • 线程池的引入和实践案例分享

    以 Java 举例,线程的使用过程中遇到了什么痛点?池化的思想的引入,Java 中是如何用线程池来解决这样问题的?Java 线程池在使用中的问题。公司又是如何实...

    小诚信驿站
  • 用go-module作为包管理器搭建go的web服务器

    本篇博客主要介绍了如何从零开始,使用Go Module作为依赖管理,基于Gin来一步一步搭建Go的Web服务器。并使用Endless来使服务器平滑重启,使用Sw...

    SH的全栈笔记
  • go mod使用

    最近由于换工作,开始交接工作。整理以前的工作内容,由于组内就我一个在做go和大数据。 所以开发没有规划,当时是怎么快怎么来。go也是使用最传统的go path的...

    若与
  • GO的第一天–代码的组织

    用户1127987
  • Go语言学习(十)| module 使用

    go module 是在go 1.11版本才开始有的,需要将环境变量 GO111MODULE 设置为 on 才能正常使用

    Mervyn
  • 「工具推荐」golang 代码可视化工具 go-callvis

    go-callvis是以图片的形式展示了go程序的调用关系,在看复杂项目时尤其有用。

    goodspeed
  • Go Module详细使用教程,包管理不在难

    go modules是 golang 1.11引入的新特性。模块是相关Go包的集合。modules是源代码交换和版本控制的单元。go命令直接支持使用module...

    咻咻ing
  • 石桥码农:如何在本地基于 nideshop 架设一个微信小程序商城?

    本文主要基于 nideshop 和 moshopserver 构建,在本地构建,mysql可以用本地的,也可以用云上的。这个项目的意义,主要在于自己学习和研究小...

    程序员LIYI

扫码关注云+社区

领取腾讯云代金券