GO语言入门,有什么好的教程啊?

Python015

GO语言入门,有什么好的教程啊?,第1张

可以学习黑马程序员的这个教程

20小时快速入门go语言:网页链接

go语言的优势

可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了。

静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,写起来的效率很高。

语言层面支持并发,这个就是Go最大的特色,天生的支持并发。Go就是基因里面支持的并发,可以充分的利用多核,很容易的使用并发。

内置runtime,支持垃圾回收,这属于动态语言的特性之一吧,虽然目前来说GC(内存垃圾回收机制)不算完美,但是足以应付我们所能遇到的大多数情况,特别是Go1.1之后的GC。

简单易学,Go语言的作者都有C的基因,那么Go自然而然就有了C的基因,那么Go关键字是25个,但是表达能力很强大,几乎支持大多数你在其他语言见过的特性:继承、重载、对象等。

丰富的标准库,Go目前已经内置了大量的库,特别是网络库非常强大。

内置强大的工具,Go语言里面内置了很多工具链,最好的应该是gofmt工具,自动化格式化代码,能够让团队review变得如此的简单,代码格式一模一样,想不一样都很困难。

跨平台编译,如果你写的Go代码不包含cgo,那么就可以做到window系统编译linux的应用,如何做到的呢?Go引用了plan9的代码,这就是不依赖系统的信息。

内嵌C支持,Go里面也可以直接包含C代码,利用现有的丰富的C库。

刚入门Go语言小白需要注意以下五点:

1、注意书写代码的一些规范吧,特别是注意大小写、英文标点符号区别等,在特别的位置写上注释。

2、主要是理解伪代码所描述的算法,伪代码要注意是不能直接运行的。

3、注意编译器版本与书籍上所介绍版本是否一致,也注意特殊符号,印刷版本可能与实际不一致。

4、书上的版本和当前所用的版本是否一致,有些情况下书上版本在现在来用已经过时了。

5、逻辑走通给自己信心,其实起步阶段不难的。

本教程介绍了 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; 新的失败种子语料库条目将被使用:

由于我们的测试失败,是时候调试了。