Golang学习:常用命令工具链介绍

Golang常用命令工具链介绍

golang语言提供非常强大的工具链,包括编译、测试、重构代码、文档、从github中pull第三方库等

go build命令

go build命令常用于将Go文件编译成相应平台的可执行文件

在这里插入图片描述
go build 主文件名,编译成功后就会自动一个可执行文件
也可以使用自定义编译的方式
GOOS=windows GOARCH=amd64 go build main.go
GOOS:表示系统名称的缩写(linux/mac/windows)
GOARCH:表示系统位数(amd64)

go install命令

go install与go build最大的不同在于,go install编译后会输出文件打包成库放到pkg文件下,下次使用的时候不再进行编译,方便使用

go get命令

go get命令表示获取第三方包,默认从github中pull第三方库或者项目到自己的GOPATH目录下
通过使用:go get 项目网站/作者/项目名
以Gin Web框架为例:go get -u github.com/gin-gonic/gin
在这里插入图片描述
-u:表示使用最新的包,重复的文件不更新
-v:表示显示操作流程的日志及信息

go fmt命令

go fmt命令类似于C的lint,但是lint只会检查问题,而go fmt代码进行格式化一遍,统一代码风格,方便维护

格式化前的代码
	func main() {
			server := http.Server{
		Addr: fmt.Sprintf(":%v", "8080"),
		}

		http.HandleFunc("/requestBody", RequestBody)
		http.HandleFunc("/process", process)
	server.ListenAndServe()
}
格式化后的代码
func main() {
	server := http.Server{
		Addr: fmt.Sprintf(":%v", "8080"),
	}

	http.HandleFunc("/requestBody", RequestBody)
	http.HandleFunc("/process", process)
	server.ListenAndServe()
}

使用go fmt命令后,会显示格式化了那些文件
在这里插入图片描述

go test命令

go test命令用于测试和验证代码的完整性
go test文件一般以xxxx_test命名

使用go test 命令时,将xxxx_test.go结尾和Test开头的函数都自动执行,否则go test会直接跳过该测试用例不执行
TestXXX测试用例需要传入*testing.T或b *testing.B(测试性能)作为参数

创建xxxx_test.go文件
在这里插入图片描述
request.go文件代码

package main

func PrintNum() int {
	result := 0
	for idx := 0; idx < 100; idx++ {
		result += idx
	}
	return result
}

func main() {
}

request_test.go文件代码如下

package main

import (
	"fmt"
	"testing"
)

func TestPrice(t *testing.T) {
	result := PrintNum()
	fmt.Println("hey:", result)
	if result != 2050 {
		t.Errorf("结果错误")
	}
}

使用go test 命令结果如下
go test结果
也可以使用 go test -v命令或者go test -v -run,-v表示test的一些详细信息,-run表示单独执行测试函数名,测试函数名可以是正则表达式

t.SkipNow():跳过当前测试用例,将当前测试用例进行PASS处理并继续执行下一个测试用例,不管测试用例有没有出现问题

如果想要测试用例按照顺序执行,可以使用subTest

package main

import (
	"fmt"
	"testing"
)

func testPrintNum1(t *testing.T) {
	result := PrintNum()
	fmt.Println("hey:", result)
	if result != 4950 {
		t.Errorf("结果错误 TestPrintNum1")
	}
}

func testPrintNum2(t *testing.T) {
	result := PrintNum()
	result--
	if result != 4949 {
		t.Errorf("结果错误 TestPrintNum2")
	}
}

func TestAll(t *testing.T) {
	t.Run("TestPrintNum1", testPrintNum1)
	t.Run("TestPrintNum2", testPrintNum2)
}

如果想要在执行测试用例前做一些初始化操作,可以使用TestMain,传入m *testing.M作为参数

package main

import (
	"fmt"
	"testing"
)

func testPrintNum1(t *testing.T) {
	result := PrintNum()
	fmt.Println("hey:", result)
	if result != 4950 {
		t.Errorf("结果错误 TestPrintNum1")
	}
}

func testPrintNum2(t *testing.T) {
	result := PrintNum()
	result--
	if result != 4949 {
		t.Errorf("结果错误 TestPrintNum2")
	}
}

func TestAll(t *testing.T) {
	t.Run("TestPrintNum1", testPrintNum1)
	t.Run("TestPrintNum2", testPrintNum2)
}

func TestMain(m *testing.M) {
	fmt.Println("TestMain Begin......")
	m.Run()
}

如果使用了初始化Tset,没有调用m.Run()方法时,除了初始化测试用例之外的测试用例都不会执行
在这里插入图片描述
注释m.Run()方法可以发现,只执行了初始化测试用例

基准测试

获得代码内存占用和运行效率的性能数据,传入(b *testing.B)参数

使用for循环,b.N作为结束条件,b.N是一个可变的值,根据每一次操作耗费多少时间(纳秒)来改变,即到了一个稳定的纳秒结束,输出次数

package main

import (
	"fmt"
	"testing"
)

func BenchPrintNum(b *testing.B) {
	for n := 0; n < b.N; n++ {
		PrintNum()
	}
}

使用 go get -v -bench="."
linux版本需要去除双引号,即go get -v -bench=.

go run命令

编译并执行go文件

需要注意的是该文件package 为main包,并且存在main()主函数,否则出现 cannot run non-main package错误信息,无法编译运行

go env命令

查看当前go的环境变量等信息

go version

查看当前golang的版本

最后golang 常用命令就介绍到这了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值