网站首页 > 文章中心 > 其它

go语言如何操作hive

作者:小编 更新时间:2023-08-16 07:29:13 浏览量:51人看过

go语言实现一个简单的简单网关

网关=反向代理+负载均衡+各种策略,技术实现也有多种多样,有基于 nginx 使用 lua 的实现,比如 openresty、kong;也有基于 zuul 的通用网关;还有就是 golang 的网关,比如 tyk.

这篇文章主要是讲如何基于 golang 实现一个简单的网关.

转自: troy.wang/docs/golang/posts/golang-gateway/

整理:go语言钟文文档:

启动两个后端 web 服务(代码)

go语言如何操作hive-图1

这里使用命令行工具进行测试

具体代码

直接使用基础库 httputil 提供的NewSingleHostReverseProxy即可,返回的reverseProxy对象实现了serveHttp方法,所以呢可以直接作为 handler.

director中定义回调函数,入参为*http.Request,决定如何构造向后端的请求,比如 host 是否向后传递,是否进行 url 重写,对于 header 的处理,后端 target 的选择等,都可以今天这一节完成.

director今天这一节具体做了:

modifyResponse中定义回调函数,入参为*http.Response,用于修改响应的信息,比如响应的 Body,响应的 Header 等信息.

最终依旧是返回一个ReverseProxy,然后将这个对象作为 handler 传入即可.

随便 random 一个整数作为索引,然后取对应的地址即可,实现比较简单.

使用curIndex进行累加计数,一旦超过 rss 数组的长度,则重置.

go语言如何操作hive-图2

后端真实节点包含三个权重:

操作步骤:

一致性 hash 算法,主要是用于分布式 cache 热点/命中问题;这里用于基于某 key 的 hash 值,路由到固定后端,但是只能是基本满足流量绑定,一旦后端目标节点故障,会自动平移到环上最近的那么个节点.

实现:

每一种不同的负载均衡算法,只需要实现添加以及获取的接口即可.

然后使用工厂方法,根据传入的参数,决定使用哪种负载均衡策略.

作为网关,中间件必不可少,这类包括请求响应的模式,一般称作洋葱模式,每一层都是中间件,一层层进去,然后一层层出来.

中间件的实现一般有两种,一种是使用数组,然后配合 index 计数;一种是链式调用.

GO语言(三十):访问关系型数据库(上)

本教程介绍了使用 Godatabase/sql及其标准库中的包访问关系数据库的基础知识.

您将使用的database/sql包包括用于连接数据库、执行事务、取消正在进行的操作等的类型和函数.

在本教程中,您将创建一个数据库,然后编写代码来访问该数据库.您的示例项目将是有关老式爵士乐唱片的数据存储库.

首先,为您要编写的代码创建一个文件夹.

①.、打开命令提示符并切换到您的主目录.

在 Linux 或 Mac 上:

在 Windows 上:

运行go mod init命令,为其提供新代码的模块路径.

此命令创建一个 go.mod 文件,您添加的依赖项将在其中列出以供跟踪.

注意: 在实际开发中,您会指定一个更符合您自己需求的模块路径.有关更多信息,请参阅一下文章.

GO语言(二十五):管理依赖项(上)

GO语言(二十六):管理依赖项(中)

GO语言(二十七):管理依赖项(下)

此时此刻呢,您将创建一个数据库.

在此步骤中,您将创建要使用的数据库.您将使用 DBMS 本身的 CLI 创建数据库和表,以及添加数据.

您将创建一个数据库,其中包含有关黑胶唱片上的老式爵士乐录音的数据.

这里的代码使用MySQL CLI,但大多数 DBMS 都有自己的 CLI,具有类似的功能.

①.、打开一个新的命令提示符.

在命令行,登录到您的 DBMS,如下面的 MySQL 示例所示.

将以下 SQL 代码粘贴到文件中,然后保存文件.

go语言如何操作hive-图3

在此 SQL 代码中:

(1)删除名为album表. 首先执行此命令可以让您更轻松地稍后重新运行脚本.

您将使用以下形式的source命令:

此时此刻呢,您将编写一些 Go 代码进行连接,以便进行查询.

现在你已经有了一个包含一些数据的数据库,开始你的 Go 代码.

找到并导入一个数据库驱动程序,该驱动程序会将您通过database/sql包中的函数发出的请求转换为数据库可以理解的请求.

①.、在您的浏览器中,访问SQLDrivers wiki 页面以识别您可以使用的驱动程序.

在此代码中:

(1)将您的代码添加到main包中,以便您可以独立执行它.

导入驱动程序后,您将开始编写代码以访问数据库.

现在编写一些 Go 代码,让您使用数据库句柄访问数据库.

您将使用指向结构的指针sql.DB,它表示对特定数据库的访问.

编写代码

①.、进入 main.go,在import您刚刚添加的代码下方,粘贴以下 Go 代码以创建数据库句柄.

该Config结构使代码比连接字符串更容易阅读.

为了简化代码,您调用log.Fatal结束执行并将错误打印到控制台.在生产代码中,您会希望以更优雅的方式处理错误.

文件的顶部现在应该如下所示:

①.、开始跟踪 MySQL 驱动程序模块作为依赖项.

使用go get 添加 github.com/go-sql-driver/mysql 模块作为您自己模块的依赖项.使用点参数表示"获取当前目录中代码的依赖项".

连接成功了!

此时此刻呢,您将查询一些数据.

GO语言(十六):模糊测试入门(上)

本教程介绍了 Go 中模糊测试的基础知识.通过模糊测试,随机数据会针对您的测试运行,以尝试找出漏洞或导致崩溃的输入.可以通过模糊测试发现的一些漏洞示例包括 SQL 注入、缓冲区溢出、拒绝服务和跨站点脚本攻击.

在本教程中,您将为一个简单的函数编写一个模糊测试,运行 go 命令,并调试和修复代码中的问题.

此时此刻呢,您将添加一些简单的代码来反转字符串,稍后我们将对其进行模糊测试.

在此步骤中,您将添加一个函数来反转字符串.

独立程序(与库相反)始终位于 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语言在云计算、大数据、微服务、高并发领域应用应用非常广泛.BAT大厂正在把Go作为新项目开发的首选语言.

Go语言应用范围:

①.、服务端开发:以前你使用C或者C++做的那些事情,用Go来做很合适,例如日志处理、文件系统、监控系统等;

以上就是土嘎嘎小编为大家整理的go语言如何操作hive相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章