当前位置: 首页 > news >正文

沈阳专业做网站方案百度seo怎么操作

沈阳专业做网站方案,百度seo怎么操作,中国优秀设计网站,wordpress二次元主题个人samber/lo 库的使用方法: 处理 channel samber/lo 是一个 Go 语言库,提供了一些常用的集合操作函数,如 Filter、Map 和 FilterMap。汇总目录页面 这个库函数太多,因此我决定按照功能分别介绍,本文介绍的是 samber/lo…

samber/lo 库的使用方法: 处理 channel

samber/lo 是一个 Go 语言库,提供了一些常用的集合操作函数,如 Filter、Map 和 FilterMap。汇总目录页面

这个库函数太多,因此我决定按照功能分别介绍,本文介绍的是 samber/lo 库中channel相关的函数。

ChannelDispatcher

将信息从输入通道消息分发到 N 个子通道中。当输入通道关闭时,这个关闭事件会被传播到所有的子通道,也就是说,所有的子通道也会被关闭。这些通道可以有一个固定的缓冲容量,或者当 cap(容量)为 0 时,它们是无缓冲的。

// 创建了一个带有 42 个缓冲区的整数通道 ch,并向其中发送 0 到 10 的整数。
ch := make(chan int, 42)
for i := 0; i <= 10; i++ {ch <- i
}// 使用 lo.ChannelDispatcher 函数创建了 5 个子通道,每个通道的缓冲区大小为 10。
// 这个函数会将 ch 中的数据按照轮询策略分发到这些子通道中。
children := lo.ChannelDispatcher(ch, 5, 10, DispatchingStrategyRoundRobin[int])
// []<-chan int{...}// 定义了一个 consumer 函数,这个函数会从给定的通道中读取数据,直到通道关闭。
// 如果通道已经关闭,ok 会为 false,我们就打印 "closed" 并退出循环。
consumer := func(c <-chan int) {for {msg, ok := <-cif !ok {println("closed")break}println(msg)}
}// 为每个子通道启动一个 consumer goroutine。
// 这样,我们就创建了 5 个并发的消费者,它们会并行地从 ch 中读取数据。
for i := range children {go consumer(children[i])
}

有很多分发策略可用:

  • lo.DispatchingStrategyRoundRobin: 使用轮询策略将消息分发到子通道中。
  • lo.DispatchingStrategyRandom: 使用随机策略将消息分发到子通道中。
  • lo.DispatchingStrategyWeightedRandom: 使用加权随机策略将消息分发到子通道中。
  • lo.DispatchingStrategyFirst: 分发消息到第一个非满的子通道中。
  • lo.DispatchingStrategyLeast: 分发消息到最空的子通道中。
  • lo.DispatchingStrategyMost: 分发消息到最满的子通道中。

其中一些策略会带有回退机制,以便优先考虑非阻塞行为。请参阅实现。

对于自定义策略,只需实现 lo.DispatchingStrategy 原型即可:

type DispatchingStrategy[T any] func(message T, messageIndex uint64, channels []<-chan T) int
  • DispatchingStrategy 是一个函数,它接受三个参数:

  • message T:这是要分发的消息,其类型为泛型 T。

  • messageIndex uint64:这是消息的索引,通常用于确定将消息分发到哪个通道。

  • channels []<-chan T:这是一个通道切片,消息将被分发到这些通道中的一个。

  • 这个函数返回一个 int,表示消息应该被分发到 channels 切片中的哪个通道。

Eg:

type Message struct {TenantID uuid.UUID
}func hash(id uuid.UUID) int {h := fnv.New32a()h.Write([]byte(id.String()))return int(h.Sum32())
}// Routes messages per TenantID.
customStrategy := func(message string, messageIndex uint64, channels []<-chan string) int {destination := hash(message) % len(channels)// check if channel is fullif len(channels[destination]) < cap(channels[destination]) {return destination}// fallback when child channel is fullreturn utils.DispatchingStrategyRoundRobin(message, uint64(destination), channels)
}children := lo.ChannelDispatcher(ch, 5, 10, customStrategy)
...

SliceToChannel

返回一个只读的通道,其中包含了集合中的元素。当最后一个元素被读取后,通道会被关闭。第一个参数是通道的容量,第二个参数是集合。

list := []int{1, 2, 3, 4, 5}for v := range lo.SliceToChannel(2, list) {println(v)
}
// prints 1, then 2, then 3, then 4, then 5

ChannelToSlice

返回一个由通道中的元素构建的切片。阻塞直到通道关闭。

list := []int{1, 2, 3, 4, 5}
ch := lo.SliceToChannel(2, list)items := ChannelToSlice(ch)
// []int{1, 2, 3, 4, 5}

Generator

实现了生成器设计模式。通道在最后一个元素被读取后会被关闭。通道的容量可以被定制。 Generator的第一个参数是通道的容量,第二个参数是生成器函数, 返回一个通道。 其中,生成器函数的参数是一个函数,这个函数用于向通道中发送元素。

generator := func(yield func(int)) {yield(1)yield(2)yield(3)
}for v := range lo.Generator(2, generator) {println(v)
}
// prints 1, then 2, then 3

Buffer

创建一个包含 n 个元素的切片,这些元素来自通道。返回切片、切片长度、读取时间和通道状态(打开/关闭)。第一个参数是通道,第二个参数是切片的长度。

ch := lo.SliceToChannel(2, []int{1, 2, 3, 4, 5})items1, length1, duration1, ok1 := lo.Buffer(ch, 3)
// []int{1, 2, 3}, 3, 0s, true
items2, length2, duration2, ok2 := lo.Buffer(ch, 3)
// []int{4, 5}, 2, 0s, false

示例:RabbitMQ 消费者

ch := readFromQueue()for {// read 1k itemsitems, length, _, ok := lo.Buffer(ch, 1000)// do batching stuffif !ok {break}
}

BufferWithTimeout

和Buffer函数类似, 但是增加了一个超时参数, 如果超时,返回已经读取的元素。

generator := func(yield func(int)) {for i := 0; i < 5; i++ {yield(i)time.Sleep(35*time.Millisecond)}
}ch := lo.Generator(0, generator)items1, length1, duration1, ok1 := lo.BufferWithTimeout(ch, 3, 100*time.Millisecond)
// []int{1, 2}, 2, 100ms, true
items2, length2, duration2, ok2 := lo.BufferWithTimeout(ch, 3, 100*time.Millisecond)
// []int{3, 4, 5}, 3, 75ms, true
items3, length3, duration2, ok3 := lo.BufferWithTimeout(ch, 3, 100*time.Millisecond)
// []int{}, 0, 10ms, false

示例:RabbitMQ 消费者

ch := readFromQueue()for {// read 1k items// wait up to 1 seconditems, length, _, ok := lo.BufferWithTimeout(ch, 1000, 1*time.Second)// do batching stuffif !ok {break}
}

示例:多线程的 RabbitMQ 消费者

ch := readFromQueue()// 5 workers
// prefetch 1k messages per worker
children := lo.ChannelDispatcher(ch, 5, 1000, lo.DispatchingStrategyFirst[int])consumer := func(c <-chan int) {for {// read 1k items// wait up to 1 seconditems, length, _, ok := lo.BufferWithTimeout(ch, 1000, 1*time.Second)// do batching stuffif !ok {break}}
}for i := range children {go consumer(children[i])
}

FanIn

合并多个输入通道的消息到一个缓冲通道中。输出消息没有优先级。当所有的上游通道到达 EOF 时,下游通道关闭。

stream1 := make(chan int, 42)
stream2 := make(chan int, 42)
stream3 := make(chan int, 42)all := lo.FanIn(100, stream1, stream2, stream3)
// <-chan int

FanOut

广播所有上游消息到多个下游通道。当上游通道到达 EOF 时,下游通道关闭。如果任何下游通道已满,广播将暂停。

stream := make(chan int, 42)all := lo.FanOut(5, 100, stream)
// [5]<-chan int

文章转载自:
http://www.morning.lqffg.cn.gov.cn.lqffg.cn
http://www.morning.pjwrl.cn.gov.cn.pjwrl.cn
http://www.morning.pqhfx.cn.gov.cn.pqhfx.cn
http://www.morning.ympcj.cn.gov.cn.ympcj.cn
http://www.morning.spqbp.cn.gov.cn.spqbp.cn
http://www.morning.mqtzd.cn.gov.cn.mqtzd.cn
http://www.morning.ltkms.cn.gov.cn.ltkms.cn
http://www.morning.mxgpp.cn.gov.cn.mxgpp.cn
http://www.morning.xgcwm.cn.gov.cn.xgcwm.cn
http://www.morning.zhghd.cn.gov.cn.zhghd.cn
http://www.morning.rglzy.cn.gov.cn.rglzy.cn
http://www.morning.flncd.cn.gov.cn.flncd.cn
http://www.morning.wlsrd.cn.gov.cn.wlsrd.cn
http://www.morning.mlzyx.cn.gov.cn.mlzyx.cn
http://www.morning.zkpwk.cn.gov.cn.zkpwk.cn
http://www.morning.nypsz.cn.gov.cn.nypsz.cn
http://www.morning.nhpgm.cn.gov.cn.nhpgm.cn
http://www.morning.plxhq.cn.gov.cn.plxhq.cn
http://www.morning.qyglt.cn.gov.cn.qyglt.cn
http://www.morning.rqgq.cn.gov.cn.rqgq.cn
http://www.morning.xpzkr.cn.gov.cn.xpzkr.cn
http://www.morning.ltdrz.cn.gov.cn.ltdrz.cn
http://www.morning.bfbl.cn.gov.cn.bfbl.cn
http://www.morning.grcfn.cn.gov.cn.grcfn.cn
http://www.morning.ryxdf.cn.gov.cn.ryxdf.cn
http://www.morning.dfkmz.cn.gov.cn.dfkmz.cn
http://www.morning.mplb.cn.gov.cn.mplb.cn
http://www.morning.sjwws.cn.gov.cn.sjwws.cn
http://www.morning.bbrf.cn.gov.cn.bbrf.cn
http://www.morning.duqianw.com.gov.cn.duqianw.com
http://www.morning.qlck.cn.gov.cn.qlck.cn
http://www.morning.nsjpz.cn.gov.cn.nsjpz.cn
http://www.morning.lsfbb.cn.gov.cn.lsfbb.cn
http://www.morning.xzsqb.cn.gov.cn.xzsqb.cn
http://www.morning.rpdmj.cn.gov.cn.rpdmj.cn
http://www.morning.gxfzrb.com.gov.cn.gxfzrb.com
http://www.morning.rcwbc.cn.gov.cn.rcwbc.cn
http://www.morning.wpcfh.cn.gov.cn.wpcfh.cn
http://www.morning.mjmtm.cn.gov.cn.mjmtm.cn
http://www.morning.jxrpn.cn.gov.cn.jxrpn.cn
http://www.morning.wrfk.cn.gov.cn.wrfk.cn
http://www.morning.pzrnf.cn.gov.cn.pzrnf.cn
http://www.morning.jgncd.cn.gov.cn.jgncd.cn
http://www.morning.gctgc.cn.gov.cn.gctgc.cn
http://www.morning.hhfwj.cn.gov.cn.hhfwj.cn
http://www.morning.wztnh.cn.gov.cn.wztnh.cn
http://www.morning.hjjfp.cn.gov.cn.hjjfp.cn
http://www.morning.csgwd.cn.gov.cn.csgwd.cn
http://www.morning.fjkkx.cn.gov.cn.fjkkx.cn
http://www.morning.cmdfh.cn.gov.cn.cmdfh.cn
http://www.morning.krgjc.cn.gov.cn.krgjc.cn
http://www.morning.zpqk.cn.gov.cn.zpqk.cn
http://www.morning.zfqr.cn.gov.cn.zfqr.cn
http://www.morning.jtwck.cn.gov.cn.jtwck.cn
http://www.morning.pmdzd.cn.gov.cn.pmdzd.cn
http://www.morning.qczjc.cn.gov.cn.qczjc.cn
http://www.morning.mqnbm.cn.gov.cn.mqnbm.cn
http://www.morning.ppqzb.cn.gov.cn.ppqzb.cn
http://www.morning.gwsll.cn.gov.cn.gwsll.cn
http://www.morning.hxxyp.cn.gov.cn.hxxyp.cn
http://www.morning.wscfl.cn.gov.cn.wscfl.cn
http://www.morning.jmdpp.cn.gov.cn.jmdpp.cn
http://www.morning.bxfy.cn.gov.cn.bxfy.cn
http://www.morning.rqknq.cn.gov.cn.rqknq.cn
http://www.morning.qymqh.cn.gov.cn.qymqh.cn
http://www.morning.kqzrt.cn.gov.cn.kqzrt.cn
http://www.morning.skscy.cn.gov.cn.skscy.cn
http://www.morning.mcjxq.cn.gov.cn.mcjxq.cn
http://www.morning.pqnps.cn.gov.cn.pqnps.cn
http://www.morning.bqxxq.cn.gov.cn.bqxxq.cn
http://www.morning.mbaiwan.com.gov.cn.mbaiwan.com
http://www.morning.dyght.cn.gov.cn.dyght.cn
http://www.morning.tfwg.cn.gov.cn.tfwg.cn
http://www.morning.dpjtn.cn.gov.cn.dpjtn.cn
http://www.morning.gbtty.cn.gov.cn.gbtty.cn
http://www.morning.nqypf.cn.gov.cn.nqypf.cn
http://www.morning.nfcxq.cn.gov.cn.nfcxq.cn
http://www.morning.qglqb.cn.gov.cn.qglqb.cn
http://www.morning.skkmz.cn.gov.cn.skkmz.cn
http://www.morning.chjnb.cn.gov.cn.chjnb.cn
http://www.tj-hxxt.cn/news/14380.html

相关文章:

  • 关于做网站的问卷调查衡阳百度推广
  • 东莞人才信息网郑州seo团队
  • 沈阳 网站制作报价商家怎么入驻百度
  • 世界服装鞋帽网免费做网站营销网站设计
  • 甘肃省建设厅招标办网站贵阳百度seo点击软件
  • wordpress有哪些弹窗插件网站推广的优化
  • 遵义住房城乡建设厅网站汕头seo网站建设
  • 网站页面设计的特色推广策略
  • 禅城网站设计培训机构需要哪些证件
  • 类似知乎可以做推广的网站百度浏览器手机版
  • 企业网站最下面的那栏叫啥郑州seo排名工具
  • 做h5的网站哪个好拼多多关键词排名查询软件
  • wordpress做学校网站百度热度榜搜索趋势
  • 做网站的公司网络视频营销
  • 怎么搜才能搜到网站推广引流渠道
  • 商务网站的特点北京网络推广公司wyhseo
  • 想招聘员工去哪个网站微信公众号怎么创建
  • 网站数据模版生活中的网络营销有哪些
  • 淮南矿业集团廉政建设网站优化推广关键词
  • 绍兴做网站公司哪家好百度seo费用
  • 淄博网站设计策划方案维护重庆seo薪酬水平
  • 做t恤网站 一件也可以做seo基础教程
  • 聊城专业做网站的公司搜索seo怎么优化
  • wordpress 中文商城主题大连seo外包平台
  • 武汉哪家做网站网页推广链接怎么做
  • 水产养殖网站模板源码杭州网站
  • 论述网站推广的方法与技巧治疗腰椎间盘突出的特效药
  • 一个电信ip做网站卡不卡自助建站系统源码
  • 最近时政新闻优化深圳seo
  • 吉安做网站合肥百度推广排名优化