部署简单.Go编译生成的是一个静态可执行文件,除了glibc外没有其他外部依赖.这让部署变得异常方便:目标机器上只需要一个基础的系统和必要的管理、监控工具,完全不需要操心应用所需的各种包、库的依赖关系,大大减轻了维护的负担.这和Python有着巨大的区别.由于历史的原因,Python的部署工具生态相当混乱【比如setuptools,distutils,pip,
buildout的不同适用场合以及兼容性问题】.官方PyPI源又经常出问题,需要搭建私有镜像,而维护这个镜像又要花费不少时间和精力.
govet等非常有用的工具.
执行性能好.虽然不如C和Java,但通常比原生Python应用还是高一个数量级的,适合编写一些瓶颈业务.内存占用也非常省.
本教程介绍了 Go 中模糊测试的基础知识.通过模糊测试,随机数据会针对您的测试运行,以尝试找出漏洞或导致崩溃的输入.可以通过模糊测试发现的一些漏洞示例包括 SQL 注入、缓冲区溢出、拒绝服务和跨站点脚本攻击.
在本教程中,您将为一个简单的函数编写一个模糊测试,运行 go 命令,并调试和修复代码中的问题.
首先,为您要编写的代码创建一个文件夹.
①.、打开命令提示符并切换到您的主目录.
在 Linux 或 Mac 上:
在 Windows 上:
运行go mod init命令,为其提供新代码的模块路径.
此时此刻呢,您将添加一些简单的代码来反转字符串,稍后我们将对其进行模糊测试.
在此步骤中,您将添加一个函数来反转字符串.
独立程序(与库相反)始终位于 package 中main.
此函数将接受string,使用byte进行循环 ,并在最后返回反转的字符串.
此函数将运行一些Reverse操作,然后将输出打印到命令行.这有助于查看运行中的代码,并可能有助于调试.
e.该main函数使用 fmt 包,所以呢您需要导入它.
第一行代码应如下所示:
从包含 main.go 的目录中的命令行,运行代码.
可以看到原来的字符串,反转它的结果,然后再反转它的结果,就相当于原来的了.
现在代码正在运行,是时候测试它了.
在这一步中,您将为Reverse函数编写一个基本的单元测试.
b.将以下代码粘贴到 reverse_test.go 中.
这个简单的测试将断言列出的输入字符串将被正确反转.
使用运行单元测试go test
此时此刻呢,您将单元测试更改为模糊测试.
单元测试有局限性,即每个输入都必须由开发人员添加到测试中.模糊测试的一个好处是它可以为您的代码提供输入,并且可以识别您提出的测试用例没有达到的边缘用例.
在本节中,您将单元测试转换为模糊测试,这样您就可以用更少的工作生成更多的输入!
请注意,您可以将单元测试、基准测试和模糊测试保存在同一个 *_test.go 文件中,但对于本示例,您将单元测试转换为模糊测试.
Fuzzing 也有一些限制.在您的单元测试中,您可以预测Reverse函数的预期输出,并验证实际输出是否满足这些预期.
例如,在测试用例Reverse("Hello, world")中,单元测试将返回指定为"dlrow ,olleH".
模糊测试时,您无法预测预期输出,因为您无法控制输入.
但是,Reverse您可以在模糊测试中验证函数的一些属性.在这个模糊测试中检查的两个属性是:
(1)将字符串反转两次保留原始值
注意单元测试和模糊测试之间的语法差异:
随着单元测试转换为模糊测试,是时候再次运行测试了.
a.在不进行模糊测试的情况下运行模糊测试,以确保种子输入通过.
如果您在该文件中有其他测试,您也可以运行go test -run=FuzzReverse,并且您只想运行模糊测试.
b.运行FuzzReverse模糊测试,查看是否有任何随机生成的字符串输入会导致失败.这是使用go test新标志-fuzz执行的.
语料库文件的第一行表示编码版本.以下每一行代表构成语料库条目的每种类型的值.由于 fuzz target 只需要 1 个输入,所以呢版本之后只有 1 个值.
c.运行没有-fuzz标志的go test; 新的失败种子语料库条目将被使用:
由于我们的测试失败,是时候调试了.
①.、简单易学.
Go语言天生支持并发,可以充分利用多核,轻松地使用并发. 这是Go语言最大的特点.
描述
Go的语法接近C语言,但对于变量的声明有所不同.Go支持垃圾回收功能.Go的并行模型是以东尼-霍尔的通信顺序进程(CSP)为基础,采取类似模型的其他语言包括Occam和Limbo,但它也具有Pi运算的特征,比如通道传输.
与C++相比,Go并不包括如枚举、异常处理、继承、泛型、断言、虚函数等功能,但增加了 切片(Slice) 型、并发、管道、垃圾回收、接口(Interface)等特性的语言级支持.
下面我们通过一个例子来看一下:
如果我们需要计算出字符串的长度,而不是底层字节的个数,那么可以使用下面的方法:
运行结果如下:
以上就是土嘎嘎小编为大家整理的go语言控制反转相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!