版权声明:所有的博客都是个人笔记,交流可以留言。未经允许,谢绝转载。。。 https://blog.csdn.net/qq_35976351/article/details/88932639
包管理
包管理是golang大型工程开发的基础,golang的一个完整的工程应该分为3个模块,分别是:
- src:所有的源代码,必须自己组织创建
- pkg:源代码编译成的二进制的包,自动生成
- bin:最终的可执行程序,自动生成。main函数所在的那个文件的包。
golang有两个路径,名称和作用分别是:
- GOROOT:golang安装的位置,这是安装的时候自动添加的,类Unix系统下通过
export $GOROOT
查看。Ubuntu18.04LTS通过apt安装的包,需要添加GOROOT=/usr/lib/go - GOPATH:这是需要自己配置的,是当前工程所在的目录,配置这个路径的作用是为了更好的使用go的包管理工具。每次开启开发的时候,使用
export
配置。以该项目为例子,终端输入export GOPATH=~/code/GoProject && source ~/.bashrc
先给出源代码结构:
Golang有个特点,每次开发一个包的文件时,最好都写上测试用例,直接开发测试一起进行;当然,这不是必须的。
每个文件的内容如下:
add.go
package simplemath
func Add(a, b int) int {
return a + b
}
add_test.go
package simplemath
import "testing"
func TestAdd1(t *testing.T) {
r := Add(1, 2)
if r != 3 {
t.Errorf("Add(1, 2) failed. Got %d, expected 3", r)
}
}
sqrt.go
package simplemath
import "math"
func Sqrt(x int) int {
i := math.Sqrt(float64(x))
return int(i)
}
sqrt_test.go
package simplemath
import "testing"
func TestSqrt1(t *testing.T) {
v := Sqrt(16)
if v != 4 {
t.Errorf("Sqrt(16) failed. Got %v, expected 4", v)
}
}
之后转到src
目录下,执行:
go install simplemath
go install calc
最终的代码结构:
代码格式化
golang本身对格式化要求就非常严格,但是为了更方便,添加了格式化工具。比如要对simplemath包的源代码进行格式化,直接执行:
go fmt simplemath
代码测试
golang的特点是可以写代码与测试同时进行,每个文文件名称后面添加_test
表示对应的测试文件。比如上述的add_test.go
就是add.go
的测试文件。以包为单位进行测试。比如测试整个simplemath包,转到src目录下,执行:
go test simplemath
测试结果输出:
ok simplemath (cached)
(cached)
是之前测试过,第一次测试会出现测试时间。
说明文档
golang的另一个巨大的优势在于,可以直接在编码的时候,集成说明文档。而且说明文档可以像官网的文档那样规范美观,并直接在浏览器中阅读。
新建以工程,src新建一个FOO包,然后新建foo.go函数,之后文件中添加:
v// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
/*
这个包用于展示文档说明。整个文档的说明必须紧贴着package
换行的话需要另起一行,下面可以添加BUG的说明
*/
package FOO
import "fmt"
// this is a function note
// function print Hello, World!
func foo(){
fmt.Println("Hello, World!")
}
// BUG(jack): #1: I'm sorry but this code has an issue to be solved.
// BUG(tom): #2: An issue assigned to another person.
然后
go install FOO
go doc FOO