Go学习笔记
Go语言基础
单元测试
单元测试是指 开发完一个模块 之后自己进行测试.
单元测试 很重要, TDD: 测试驱动开发.
Go语言内置
testing
包进行单元测试, 所有以*_test.go
为后缀名称的文件, 都可通过go test
命令, 自动执行测试函数, 不会被go build
编译.
类型 | 格式 | 作用 |
---|---|---|
测试函数 | 函数名前缀为Test | 测试程序的一些逻辑行为是否正确 |
基准函数 | 函数名前缀为Benchmark | 测试函数的性能 |
示例函数 | 函数名前缀为Example | 为文档提供示例文档 |
例子1
|
|
|
|
测试组
- 将多个测试用例 在一个函数中完成, 就是 测试组
|
|
|
|
测试覆盖率
测试覆盖率是指 代码被测试套件覆盖的百分比, 通常使用的都是语句覆盖率, 测试中至少被运行一次的代码占总代码的比例.
Go 语言中使用
go test -cover
来查看测试覆盖率
基准测试 (Benchmark)
- 基准测试就是 性能测试的一种.
- 默认情况下每次最少执行
1s
,如果不足1s
会重复执行,b.N的值会按1,2,5,10,20,50..增加
例子
|
|
性能比较函数
- 在基准测试的前提下,可以对测试进行比较
例子
|
|
|
|
重置时间
- 函数内某些操作是不需要计算在函数性能内的,比如连接数据库,连接外部api等.
- 函数内可使用
b.ResetTimer()
进行重置时间.
|
|
并行测试
- 开启并行测试,需要执行
b.RunParallel(func(pb *testing.PB)
方法,默认会以逻辑CPU个数来进行并行测试.
例子
|
|
|
|
Setup与TearDown
- Setup 意指 在测试之前需要进行设置,如连接数据库等.
- TearDown 意指 在测试之后需要进行卸载
TestMain
- 在测试文件中调用
func TestMain(m *testing.M)
那么程序在生成测试之前会先调用TestMain(m)
,然后在执行具体测试. TestMain
运行在goroutine
中, 调用m.Run
前后做setup
和teardown
, 退出测试时使用m.Run
的返回值做为参数调用os.Exit
.
例子:
|
|
子测试(Setup/Teardown)
例子:
|
|
|
|
示例函数
- 示例函数 以
Example
为前缀. 它既没有参数也没有返回值.
|
|
|
|
Go网络编程
OSI七层模型
- 互联网协议
|
|
TCP/IP 协议
TCP协议
- TCP(Transmission Control Protocol) 既传输控制协议/网络协议, 是一种面向连接(连接导向)的、可靠的、基于字节流的传输(Transport layer) 通信协议,因为是面向连接的协议,数据像水流一样传输,所以会存在黏包问题。
IP协议
IP(Internet Protocol) 因特网协议是为计算机网络相互连接进行通信而设计的协议。在因特网中,它规定了计算机在因特网中进行通信应该遵守的规则。
IP协议中还有一个非常重要的内容,给因特网上的每台计算机和设备都规定了一种地址,叫做"IP地址”。
Socket
Socket
是BSD UNIX
的进程通讯机制, 通常也称为 “套接字” , 用于描述IP地址和端口,是一个通讯链的句柄.Socket
可以理解为TCP/IP
网络的API,它定义了很多函数或例程,程序员可以用它们来开发TCP/IP
网络上的应用程序.Socket
是应用层与TCP/IP
协议族通信的中间软件抽象层,在设计模式中,Socket
其实就是一个门面模式,它把复杂的TCP/IP
协议族隐藏在Socket
后面,对用户来说只需要调用Socket
规定的相关函数,让Socket
去组织符合指定的协议数据然后进行通信。
|
|
TCP服务端/客户端
服务端
- Go语言可通过
net
包实现TCP
服务端
server
|
|
Client
|
|
TCP黏包问题
Server
|
|
Client
|
|
模块
|
|
UDP服务端/客户端
- UDP协议(User Datagram Protocol) 用户数据报协议, 是 OSI 参考模型中一种 无连接 的传输层协议, 不需要建立连接就可以直接进行数据发送和接收, 属于不可靠的、无时序的通信, UDP协议的实时性比较好,通常用于视频直播相关领域.
Server服务端
|
|
Client客户端
|
|
Http
- HTTP 超文本传输协议(HTTP , HyperText Transfer Protocol) 是互联网上应用最为广泛的一种网络传输协议, 所有的 WWW 文件都必须遵守这个标准.
- 最初设计HTTP是为了提供一种发布和接收HTML页面的方法.
HTTP数据传输图解
|
|
模拟httpClient
|
|
HttpServer
- 使用Go语言中的
http
包
|
|