golang过滤,golang过滤器模式

本文目录一览:

golang 过滤器怎么返回json对象

innodb_data_home_dir = /longxibendi/mysql/mysql/var/

#innodb_data_file_path = ibdata1:1G:autoextend

innodb_data_file_path = ibdata1:500M;ibdata2:2210M:autoextend #表空间

innodb_file_io_threads = 4 #io线程数

【golang】海量数据去重-布隆过滤器

在做域名爆破中,遇到了把一个300G的子域名json文件进行去重,一开始是考虑使用字典进行去重,但是数据量大了,会造成内存泄露。看网上资料介绍了一种方案,就是使用布隆过滤器。

布隆过滤器是一种数据结构,概率型数据结构,特定是高效插入和查询,可以用来告诉你“某一值一定不存在或者kennel存在”。

相比于传统的map、set等数据结构,占用空间更少,但其返回结果是概率型的,不确定。

布隆过滤器内部维护一个bitArray(位数组),开始所有数据为0,当一个元素过来时,能过多个哈希函数(hash1、hash2、hash3)计算不同的hash值,并通过hash值找到bitArray的下标,将里面的值改为由0变为1。布隆过滤器有一个误判率,误判率越低,数组越长,所在空间越大,误判率越高,数组越小,所占空间越小。

这里贴上一个技术大牛的博客地址,里面对布隆过滤器用法以及在redis里面处理缓存穿透问题的详细介绍。

组件分享之后端组件——基于Golang实现的高性能和弹性的流处理器benthos

近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。

本节我们分享的是基于Golang实现的高性能和弹性的流处理器 benthos ,它能够以各种代理模式连接各种 源 和 接收器,并对有效负载执行 水合、浓缩、转换和过滤 。

它带有 强大的映射语言 ,易于部署和监控,并且可以作为静态二进制文件、docker 映像或 无服务器函数 放入您的管道,使其成为云原生。

Benthos 是完全声明性的,流管道在单个配置文件中定义,允许您指定连接器和处理阶段列表:

Apache Pulsar, AWS (DynamoDB, Kinesis, S3, SQS, SNS), Azure (Blob storage, Queue storage, Table storage), Cassandra, Elasticsearch, File, GCP (Pub/Sub, Cloud storage), HDFS, HTTP (server and client, including websockets), Kafka, Memcached, MQTT, Nanomsg, NATS, NATS JetStream, NATS Streaming, NSQ, AMQP 0.91 (RabbitMQ), AMQP 1, Redis (streams, list, pubsub, hashes), MongoDB, SQL (MySQL, PostgreSQL, Clickhouse, MSSQL), Stdin/Stdout, TCP UDP, sockets and ZMQ4.

1、docker安装

具体使用方式可以参见该 文档

有关如何配置更高级的流处理概念(例如流连接、扩充工作流等)的指导,请查看 说明书部分。

有关在 Go 中构建您自己的自定义插件的指导,请查看 公共 API。

golang的iris框架的模版如何相互引用?

1.用{{}}包围的是变量,如 {{testName}} ,这表示把给定变量的值插入, {%%}这是块元素 在faygo里叫tag,常见的有 for , if 等

2.如何在模板中定义变量, 平常我们在使用的模板的时候的常会有这样的需要,在模板中要定义一个变量以方便前端逻辑的实现,在faygo模板中定义变量需要用到标签{%set%}

使用方法

{#定义变量 newName #}

{% set newName = “hello faygo” %}

{#获取变量newName的值#}

{{newName}}

定义用 tag set 取值就是上文所提到的{{}}取值

3.在模板中调用方法

这也是一个非常常见和有用的方法,在faygo中调用方法有两种方式 , 一是在渲染模板时在faygo.Map在加入你要调用的方法 , 二是注册一个全局的方法 (在faygo里叫filter过滤器),我们分别来看一下每个方法的实现

1) 在渲染模板时加入方法(render)

//在后端render时加入方法 testFunc

rErr := ctx.Render(200, switchDir+”index.html”, faygo.Map{

“TITLE”: title,

“testMap”: map[string]string{“aaa”: “111111”},

“testFunc”: func(s string) string {

return s + ” this is test func”

},

})

{#前端模板中调用#}

{{ testFunc(“hello”) }}

结果如下

hello this is test func

这种方法适合只用于此模板一个特殊方法 , 在其它功能中不通用 ,那么如果想定义一个方法全局都可以使用怎么办,这里就需要注册全局方法了(见下文)

2)注册全局方法(过滤器)

如果想定义一个方法全局都可以使用怎么办 ,这里就需要注册一个方法

// pongo2 注册一个全局过滤器,一般在程序启动时init中注册

//这里注册了一个名叫testFilter的过滤器,指向TestFilterFunc方法

pongo2.RegisterFilter(“testFilter”, TestFilterFunc)

func TestFilterFunc(in, param *pongo2.Value) (*pongo2.Value, *pongo2.Error) {

a := in.String() + ” this is global filter”

return pongo2.AsValue(a), nil

}

在这里我们看到TestFilterFunc方法里接收参数和返回参数的类型是pongo2.Value和pongo2.Error

在注册过滤器里方法的接收参数和返回参数是固定的这两个不能改变

官网的话:

All functions’ parameters types must be of either your own type or of type *pongo2.Value(no matter how many) and functions must return one value of either type *Value or your own one.

那么我们返回数据时怎么返回? 在上面例子在我们看到了 AsValue 这个方法可以将我们数据返回,我们可以返回struct,map,array,string 等

在前端调用

{{ “hello” | testFilter }}

结果:

hello this is global filter

返回结构体:

type LoginUserInfo struct {

Username string `json:”username”`

Telephone string `json:”telephone”`

Email string `json:”email”`

Level int `json:”level”`

}

func TestFilterFunc(in, param *pongo2.Value) (*pongo2.Value, *pongo2.Error) {

userInfo := LoginUserInfo{

Username: “userA”,

Telephone: “123456”,

Email: “123456@test.com”,

Level: 1,

}

return pongo2.AsValue(userInfo), nil

}

前端使用:

{#定义一个变量接收struct数据 #}

{% set uinfo = “” | testFilter %}

{#取用户名字#}

{{ uinfo.Username }}

注意,如是 uinfo 只是一个struct 不是struct数组([]uinfo)时 在模板中不能使用{% for %} 使用也不会得到任何数据

如果uinfo是struct数组 在模板中for循环时不要使用 key,val in uinfo

如果uinfo是struct数组 uinfo = []userInfo{}

{#错误示例#}

{% for key,val in uinfo %}

{{val.Username}}

{% endfor %}

struct数据不能使用key,否则循环会执行,但取不到任何数据

{# 正确示例 #}

{% for val in uinfo %}

{{val.Username}}

{% endfor %}

说一下返回map时 用for循环的情况,无论是否是map数组都可以用for key,val in uinfo 来遍历数据

4. 在模板中字符串的连接和宏标签的使用

在模板中有时我们会碰到这样的需要:在模板中有几个变量 ,我们想把这几个变量连接在一起赋值给另一个变量以做其它操作

例: 在模板中有三个变量 host是域名,route是路由地址,param是参数 ,要把这三个变量连接起来赋值给另一个新的变量做urlencode操作。这应该怎么办

因为在模板中使用 + 号连接变量时,程序会认为是数学运算,两个字符串的连接值为0, 如果用内置的filter: join来连接需要传入一个slice,但这三个只是字符串变量。

这个时候我们可能就要用到宏标签了% macro %% endmacro %.

思路是这样的,在宏标签中定义一个宏(可以理解为一个方法),这个宏接收三个参数(参数个数看需求而定),在宏内返回连接的字符串

代码:

{#定义三个变量#}

{% set host=”” %}

{% set route=”/aaa/bbb” %}

{% set param= “?id=123” %}

{#定义一个宏标签接收三个参数,并返回。注意在宏标签内如果换行,输出的结果中也会有换行,在urlencode的时候也会把换行符进行转义#}

{% macro joinUrl(paramA,paramB,paramC) %}{{paramA}}{{paramB}}{{paramC}}{% endmacro %}

hr

{#定义一个新变量调用宏方法,并将三个参数传入#}

{% set newurl = joinUrl(host,route,param) %}

{#输出newurl的值#}

{{newurl}}br

{#输入出urlencode后的字符串#}

{{newurl|urlencode}}br

结果:

http%3A%2F%2F

在宏标签在也可加入自定义的一些字符串如在上面的宏标签返回结果中要加一个固定字符可以这样写:

{% macro joinUrl(paramA,paramB,paramC) %}{{paramA}}{{paramB}}{{paramC}}from=macro{% endmacro %}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/306613.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2025-01-02 12:01
下一篇 2025-01-02 12:01

相关推荐

  • 使用Golang调用Python

    在现代软件开发中,多种编程语言的协作是相当普遍的。其中一种使用场景是Golang调用Python,这使得在使用Python库的同时,可以利用Golang的高性能和强大并发能力。这篇…

    编程 2025-04-29
  • 使用Golang创建黑色背景图片的方法

    本文将从多个方面介绍使用Golang创建黑色背景图片的方法。 一、安装必要的代码库和工具 在开始创建黑色背景图片之前,我们需要先安装必要的代码库和工具: go get -u git…

    编程 2025-04-29
  • 手机安全模式怎么解除?

    安全模式是一种手机自身的保护模式,它会禁用第三方应用程序并使用仅限基本系统功能。但有时候,安全模式会使你无法使用手机上的一些重要功能。如果你想解除手机安全模式,可以尝试以下方法: …

    编程 2025-04-28
  • Qt State Machine与状态机模式

    本文将介绍Qt State Machine和状态机模式在Qt中的实现。Qt提供了QStateMachine和QState两个类,可以方便地实现状态机模式,并且能有效地处理复杂的、多…

    编程 2025-04-27
  • 显示C++设计模式

    本文将详细介绍显示C++设计模式的概念、类型、优点和代码实现。 一、概念 C++设计模式是在软件设计阶段定义,用于处理常见问题的可重用解决方案。这些解决方案是经过测试和验证的,并已…

    编程 2025-04-27
  • Centos7进入单用户模式的解释

    本文将介绍如何在Centos7中进入单用户模式,并从以下几个方面进行详细的阐述。 一、Centos7进入单用户模式的解答 在Centos7中进入单用户模式需要执行以下步骤: 1. …

    编程 2025-04-27
  • 深入解析PSM模式

    一、PSM模式是什么 PSM模式,即页面-状态-模型模式,是一种前端开发模式。它以页面为中心,将页面内的所有状态和业务逻辑抽象成一个由页面转化而来的虚拟状态机模型,从而将业务逻辑与…

    编程 2025-04-25
  • Spring Boot Filter过滤器

    Spring Boot是当前非常流行的Java Web开发框架,它提供了一个非常方便的方式来创建和运行Web应用程序。相比于传统的Java EE应用程序,它更加简单易用、依赖性更少…

    编程 2025-04-25
  • 授权码模式与OAuth2.0

    一、什么是授权码模式 授权码模式(Authorization Code Grant Type)是OAuth2.0协议中最常用的授权方式之一,也是最为安全的一种授权方式。授权码模式的…

    编程 2025-04-24
  • 布谷鸟过滤器详解

    布谷鸟过滤器是一种高效的数据结构,主要用于判断一个元素是否存在于一个集合中。它基于哈希表实现,以空间换时间,具有优秀的时间和空间复杂度。本文将从应用场景、原理、实现方式、优缺点等多…

    编程 2025-04-24

发表回复

登录后才能评论