2021/10/20 老男孩带你21周Go语言 (八)

P116 今日分享

在这里插入图片描述

P117今日内容概要

在这里插入图片描述

P118 内容回顾01

锁。sync.Mutex是一个结构体,值类型,给函数传参的时候要传指针
在这里插入图片描述

等待组不传指针,是因为一般都定义全局的变量,用来等goroutine执行完再继续
在这里插入图片描述

为什么要用锁。防止同一时刻多个goroutine操作同一个资源
在这里插入图片描述
读写互斥锁,适用于读多写少的场景。
读的时候其他也能读
写的时候其他不能读写

在这里插入图片描述
等待组的使用。
wg.Add(n)起多少个goroutine就加几个计数
wg.Done在goroutine函数中,结束时表示完成,计数器-1
wg.Wait 等待所有的goroutine都结束

在这里插入图片描述
sync.Once某些函数只需要执行一次的时候使用
在这里插入图片描述
once.Do()接收一个没有参数没有返回值的函数,如果需要可以闭包
在这里插入图片描述

内置的map不是并发安全的,并发操作map会报错,所以又了sync.Map

在这里插入图片描述
在这里插入图片描述
GO语言内置了一些针对内置的基本数据类型的一些并发安全的操作,原子操作
在这里插入图片描述

在这里插入图片描述

P119 内容回顾02

OSI七层模型,应表会传网数物。
数据链路层是以太网协议,传的高低电平。
网络层ip协议,网卡唯一的mac地址
传输层,tcp,udp
会话层,smtp邮件。
表示层,jpg

在这里插入图片描述

在这里插入图片描述
socket编程是个抽象层,自己在写软件的时候不需要取关注tcp,udp了,调用socket的一个方法就能起一个服务

在这里插入图片描述
提升网络效率的时候,往往建立tcp连接后,不是马上发送数据,而是等待一段时间看看是否还有要发送的数据一起发出去

在这里插入图片描述

P120 http serer端

客户端相当于浏览器,服务端相当于网站

在这里插入图片描述
在这里插入图片描述
字符串本质上就是字节的切片,可以强制类型转换
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以从文件里去读
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
读出来的内容是个slice,写到返回体里
在这里插入图片描述
在这里插入图片描述
这个文本 就是写在xx.txt里的内容

在这里插入图片描述
浏览器会去渲染

在这里插入图片描述
在这里插入图片描述
GET请求 。请求路径,http协议
host访问地址是什么
connection:keep-alive长连接
progma:no-cache 不缓存
user-agent:终端
accept:期待得到一个什么 类型的返回数据
accept-enccoding 期待接收的编码形式
accept-language 允许的语言

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
找到i1的标签,修改地址
在这里插入图片描述
在这里插入图片描述

P121 http _client

写一个http_server
在这里插入图片描述
下一个client,模拟请求操作
在这里插入图片描述
在这里插入图片描述
在客户端读出服务端返回的body
在这里插入图片描述
在这里插入图片描述
读到客户端请求的一些信息
在这里插入图片描述
发送参数试试能否取到
f
get请求的数据不在body里
在这里插入图片描述
在这里插入图片描述
现在就拿到参数了
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
req是个请求对象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一定要关闭resp.body

在这里插入图片描述
在这里插入图片描述
造一个禁用keepalive的传输模式
在这里插入图片描述
可以全局只用一个client

在这里插入图片描述
下面这段代码适用请求不是特别 频繁的
在这里插入图片描述
在这里插入图片描述

P122 单元测试

开发自己给自己的代码写测试
在这里插入图片描述
在这里插入图片描述
所有的测试函数都需要Test开头
在这里插入图片描述
在这里插入图片描述
假如写一个切割字符串的函数
在这里插入图片描述
在这里插入图片描述
你写了一个包,别人需要这样来调用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再写一个
在这里插入图片描述
在这里插入图片描述
同一个包调用,单元测试
在这里插入图片描述
go test会去找当前包下划线test结尾i的文件,挨个去执行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这些就是docker项目里的test文件

在这里插入图片描述

P123 测试组和子测试

第一次执行的时候传进来两个参数
先申明ret变量,字符串切片
找到分割字符,就进行for循环,append给slice追加

在这里插入图片描述
新增测试就失败了

在这里插入图片描述
**说明之前字符串切割还是有问题的,进行修改 **
在这里插入图片描述
再测试就OK了
v
在这里插入图片描述
在这里插入图片描述
中间有些失败

在这里插入图片描述
在这里插入图片描述
使用一个map,不用切片了,下面遍历一个map
在这里插入图片描述

在这里插入图片描述
这样可以单独跑某一个测试用例
在这里插入图片描述
一般是60%

在这里插入图片描述
go test -cover测试覆盖率
在这里插入图片描述
也可以输出文件
可以sh
html会打开一个页面

在这里插入图片描述

绿色都是覆盖到了
在这里插入图片描述
在这里插入图片描述

P124 性能基准测试

在这里插入图片描述
在这里插入图片描述
基准行测试。执行了1000万次
在这里插入图片描述
在这里插入图片描述
这一行代码节省了内存开销

zheyi

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
险些一个公用的,包装进去
在这里插入图片描述
别人调用了几个,看参数就知道跑了多少个

在这里插入图片描述
在这里插入图片描述
默认就执行1秒,如果等1秒,就执行一次
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
指定多少个goroutine去执行
在这里插入图片描述
在这里插入图片描述
setup测试前的准备工作,teardown收尾工作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
进行子测试的时候进行一个setup
在这里插入图片描述
在这里插入图片描述

P125 性能优化简介

在这里插入图片描述
net/http/pprof封装了runtime/pprof库

在这里插入图片描述
采集cpu指标信息
在这里插入图片描述
采集内存相关信息
在这里插入图片描述
测试服务型的应用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通道没初始化就是nil,会阻塞
在这里插入图片描述
在这里插入图片描述
参数

在这里插入图片描述

P126 flag包用法

在这里插入图片描述
os.Args是个slice,可以直接取值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
*&取地址,从地址取值
在这里插入图片描述
在这里插入图片描述
这样就拿到了参数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

时间间隔
在这里插入图片描述
类型是time.duration类型
在这里插入图片描述
在这里插入图片描述
传一个内存地址。&name
在这里插入图片描述
在这里插入图片描述
解析一定要用Parse

在这里插入图片描述
在这里插入图片描述
Args把传进来的参数都以切片的形式打印出来。
Narg返回命令行承诺书后的其他参数个数。
NFlag 返回使用的命令行参数个数

在这里插入图片描述

在这里插入图片描述

P127 pprof性能调优简介

**上面定义两个指标,是否开启cpu和内存 profile的标志位,不加–mem --cpu默认就是false,不开启标志位。
**

在这里插入图片描述
如果cpupprof是true,就进入下面代码执行,创建一个cpu.pprof文件,开始记录cpu的一些信息,往文件里去写。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
这个文件,列出了程序20秒中,cpu的信息

在这里插入图片描述
在这里插入图片描述
交互页面,top 3,可以看到前3个占用cpu多的函数
在这里插入图片描述
重新修改之前的代码
在这里插入图片描述
flat 当前函数占用cpu的耗时
flat% 当前函数占用cpu的耗时百分比

在这里插入图片描述
相当于优化后的logicode不是最多占用cpu的服务了

在这里插入图片描述
list加函数名,可以看这个函数的哪一行出现了问题

在这里插入图片描述
在这里插入图片描述
下载这个图形化的可视化 工具
在这里插入图片描述
在这里插入图片描述
能够 分析占用cpu时间最长的那一段

在这里插入图片描述
在这里插入图片描述
火焰图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总共20s,19.11s被logiccode函数占用

在这里插入图片描述
测试优化后的代码

在这里插入图片描述
在这里插入图片描述
y轴表示cpu调用方法的先后,x表示每个采样时间内,方法所占的时间百分比。
在这里插入图片描述

P128 今日分享面试题

实现一个列表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值