go语言入门基础笔记 go语言基础教程

Go语言编程入门时需要注意什么刚入门Go语言小白需要注意以下五点:
1、注意书写代码的一些规范吧 , 特别是注意大小写、英文标点符号区别等,在特别的位置写上注释 。
2、主要是理解伪代码所描述的算法,伪代码要注意是不能直接运行的 。
3、注意编译器版本与书籍上所介绍版本是否一致,也注意特殊符号,印刷版本可能与实际不一致 。
4、书上的版本和当前所用的版本是否一致,有些情况下书上版本在现在来用已经过时了 。
5、逻辑走通;给自己信心,其实起步阶段不难的 。
GO语言(十六):模糊测试入门(上)本教程介绍了 Go 中模糊测试的基础知识 。通过模糊测试,随机数据会针对您的测试运行,以尝试找出漏洞或导致崩溃的输入 。可以通过模糊测试发现的一些漏洞示例包括 SQL 注入、缓冲区溢出、拒绝服务和跨站点脚本攻击 。
在本教程中 , 您将为一个简单的函数编写一个模糊测试,运行 go 命令,并调试和修复代码中的问题 。
首先 , 为您要编写的代码创建一个文件夹 。
1、打开命令提示符并切换到您的主目录 。
在 Linux 或 Mac 上:
在 Windows 上:
2、在命令提示符下,为您的代码创建一个名为 fuzz 的目录 。
3、创建一个模块来保存您的代码 。
运行go mod init命令,为其提供新代码的模块路径 。
接下来,您将添加一些简单的代码来反转字符串,稍后我们将对其进行模糊测试 。
在此步骤中,您将添加一个函数来反转字符串 。
a.使用您的文本编辑器 , 在 fuzz 目录中创建一个名为 main.go 的文件 。
独立程序(与库相反)始终位于 package 中main 。
此函数将接受string,使用byte进行循环,并在最后返回反转的字符串 。
此函数将运行一些Reverse操作 , 然后将输出打印到命令行 。这有助于查看运行中的代码,并可能有助于调试 。
e.该main函数使用 fmt 包,因此您需要导入它 。
第一行代码应如下所示:
从包含 main.go 的目录中的命令行,运行代码 。
可以看到原来的字符串,反转它的结果,然后再反转它的结果,就相当于原来的了 。
现在代码正在运行,是时候测试它了 。
在这一步中,您将为Reverse函数编写一个基本的单元测试 。
a.使用您的文本编辑器,在 fuzz 目录中创建一个名为 reverse_test.go 的文件 。
b.将以下代码粘贴到 reverse_test.go 中 。
这个简单的测试将断言列出的输入字符串将被正确反转 。
使用运行单元测试go test
接下来,您将单元测试更改为模糊测试 。
单元测试有局限性,即每个输入都必须由开发人员添加到测试中 。模糊测试的一个好处是它可以为您的代码提供输入,并且可以识别您提出的测试用例没有达到的边缘用例 。
在本节中 , 您将单元测试转换为模糊测试 , 这样您就可以用更少的工作生成更多的输入!
请注意 , 您可以将单元测试、基准测试和模糊测试保存在同一个 *_test.go 文件中,但对于本示例,您将单元测试转换为模糊测试 。
在您的文本编辑器中,将 reverse_test.go 中的单元测试替换为以下模糊测试 。
Fuzzing 也有一些限制 。在您的单元测试中,您可以预测Reverse函数的预期输出,并验证实际输出是否满足这些预期 。
例如,在测试用例Reverse("Hello, world")中,单元测试将返回指定为"dlrow ,olleH".
模糊测试时,您无法预测预期输出,因为您无法控制输入 。
但是,Reverse您可以在模糊测试中验证函数的一些属性 。在这个模糊测试中检查的两个属性是:
(1)将字符串反转两次保留原始值
(2)反转的字符串将其状态保留为有效的 UTF-8 。
注意单元测试和模糊测试之间的语法差异:
(3)确保新包unicode/utf8已导入 。
随着单元测试转换为模糊测试,是时候再次运行测试了 。
a.在不进行模糊测试的情况下运行模糊测试,以确保种子输入通过 。
如果您在该文件中有其他测试,您也可以运行go test -run=FuzzReverse , 并且您只想运行模糊测试 。
b.运行FuzzReverse模糊测试,查看是否有任何随机生成的字符串输入会导致失败 。这是使用go test新标志-fuzz执行的 。
模糊测试时发生故障,导致问题的输入被写入将在下次运行的种子语料库文件中go test,即使没有-fuzz标志也是如此 。要查看导致失败的输入,请在文本编辑器中打开写入 testdata/fuzz/FuzzReverse 目录的语料库文件 。您的种子语料库文件可能包含不同的字符串,但格式相同 。
语料库文件的第一行表示编码版本 。以下每一行代表构成语料库条目的每种类型的值 。由于 fuzz target 只需要 1 个输入 , 因此版本之后只有 1 个值 。
c.运行没有-fuzz标志的go test; 新的失败种子语料库条目将被使用:
由于我们的测试失败,是时候调试了 。
GO语言(十五):泛型入门(下)-在本节中,您将添加通用函数调用的修改版本,进行小的更改以简化调用代码 。您将删除在这种情况下不需要的类型参数 。
当 Go 编译器可以推断您要使用的类型时,您可以在调用代码中省略类型参数 。编译器从函数参数的类型推断类型参数 。
请注意,这并不总是可能的 。例如 , 如果您需要调用没有参数的泛型函数 , 则需要在函数调用中包含类型参数 。
在 main.go 中,在您已有的代码下方,粘贴以下代码 。
在此代码中:
(1)调用泛型函数,省略类型参数 。
从包含 main.go 的目录中的命令行,运行代码 。
接下来,您将通过将整数和浮点数的并集捕获到您可以重用的类型约束(例如从其他代码中)来进一步简化函数 。
正如您将在本节中看到的,约束接口也可以引用特定类型 。
1、编写代码
在此代码中:
b.在您已有的函数下方,粘贴以下通用 SumNumbers函数 。
在此代码中:
c.在 main.go 中,在您已有的代码下方,粘贴以下代码 。
在此代码中:
(1)调用SumNumbers打印每个map的总和 。
与上一节一样,在调用泛型函数时省略了类型参数(方括号中的类型名称) 。Go 编译器可以从其他参数推断类型参数 。
从包含 main.go 的目录中的命令行,运行代码 。
做得很好!您刚刚学习了 Go 中的泛型 。
【go语言入门基础笔记 go语言基础教程】关于go语言入门基础笔记和go语言基础教程的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读