Go语言实战读书笔记(3):标准库,测试
目录
前言
- 本篇笔记基于《Go语言实战》
- 本篇笔记主要记录一些gopl里没提到的,或者不同说法的地方
标准库
- 标准库的源代码都会安装在$GOROOT/src/pkg文件夹中
- 作文标准库的源代码,他们都是经过预编译的,预编译后的文件,被称为归档文件(archive file),放在了$GOROOT/pkg文件夹里
记录日志
log包
- log包提供了最基本的功能
const Ldate = 1 << iota ...
func Fatal(v ...interface{})
func Fatalf(format string, v ...interface{})
func Fatalln(v ...interface{})
func Flags() int
func Output(calldepth int, s string) error
func Panic(v ...interface{})
func Panicf(format string, v ...interface{})
func Panicln(v ...interface{})
func Prefix() string
func Print(v ...interface{})
func Printf(format string, v ...interface{})
func Println(v ...interface{})
func SetFlags(flag int)
func SetOutput(w io.Writer)
func SetPrefix(prefix string)
type Logger struct{ ... }
func New(out io.Writer, prefix string, flag int) *Logger
定制日志记录器
- 通过log包提供的Logger类型声明,log包的New方法创建
func New(out io.Writer, prefix string, flag int) *Logger
JSON编码解码
- 有时候,无法为JSON的格式声明确定一个结构类型,可以使用map来解决
package main
import (
"encoding/json"
"fmt"
"log"
)
func main() {
c := make(map[string]interface{})
c["name"] = "Gopher"
c["title"] = "programmer"
c["contact"] = map[string]interface{}{
"home": "415.333.3333",
"cell": "415.555.5555",
}
data, err := json.MarshalIndent(c, "", " ")
if err != nil {
log.Println("ERROR:", err)
return
}
fmt.Println(string(data))
}
测试
单元测试
- 单元测试 :在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。
- 主要用到了testing包中的t *testing.T来做测试
- t.Log:输出一般的信息
- t.Logf:输出格式化的信息
- t.Fatal: 输出格式化的错误信息并立刻停止测试函数
- t.Errorf:输出格式化的错误信息,不会停止测试函数
基础单元测试(basic test)
- 使用某一测试数据进行单元测试
表组测试(table test)
- 使用一组不同的数据进行单元测试
模仿调用(mock)
- 有时候需要访问外部资源,例如网络、数据库,但是这些资源并不一定存在,可以使用一些手段来模拟
测试服务端点
- 如果在构造网络API,希望直接测试自己的服务的所欲服务端点,而不用启动整个网络服务,可以使用httptest
示例(Example)
- 使用_examle_test.go结尾的文件
基准测试
- 主要使用了b *testing.B
- 文件以_test.go结尾,测试函数以Benchmark开头

浙公网安备 33010602011771号