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开头
posted @ 2019-08-05 17:03  DickLai  阅读(218)  评论(0)    收藏  举报