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

成都网站制作方案网站脚本错误

成都网站制作方案,网站脚本错误,企业网站后台管理软件,深圳品牌vi设计Golang实用技巧 Golang实用技巧 Context 1. 为了gorouines更可靠#xff0c;避免实用context.Background()2. 不幸得是#xff0c;context.Value 不是我们的朋友3. 使用context.WithoutCancel 保持 context 活跃 Context 1. 为了gorouines更可靠#xff0c;避免实用con…Golang实用技巧 Golang实用技巧 Context 1. 为了gorouines更可靠避免实用context.Background()2. 不幸得是context.Value 不是我们的朋友3. 使用context.WithoutCancel 保持 context 活跃 Context 1. 为了gorouines更可靠避免实用context.Background() 在我们同时管理多个任务时我们会实用goroutine对吧每个goroutine专用于特定的功能比如发HTTP请求或者查询数据库。当这些任务需要暂停时问题就出现了这也是棘手的地方。因为我们不希望goroutines永久停止或阻塞没有办法退出。 “为什么我们应该避免直接使用 context.Background() ” 我们之所以避免直接使用 context.Background()主要是因为它无法在出现问题时停止或取消执行。它是我们能用context的最简单形式没有值values 、没有截止日期截止日期、没有取消信号cancellation signals。当执行卡住或要顺利结束时这可能会成为一个问题。 为了解决这个问题通常我们依靠两个策略取消cancel和超时timeout: context.WithTimeout(ctx, duration) context.WithTimeoutCause(ctx, duration, errors.New(custom message))context.WithCancel(ctx) context.WithCancelCause(ctx)context.WithDeadline(ctx) context.WithDeadlineCause(ctx, deadline, errors.New(custom message))有了这些工具我们启动每个 goroutine 都带有明确的预期“goroutine可以及时完成任务或者解释为什么不能及时完成另外必要情况下可以取消任务。” 以下几点请记住 WithTimeout 其实就是换了个名字的 WithDeadline。最近更新的 Go版本 1.20 和 1.21中添加的 XXXCause 函数提供了更好的错误报告。如果 XXXCause 发生超时它会提供更详细的错误消息“context deadline exceeded: custom message.” “channels怎么样我不想在channel上永久等待。” 为了确保不会无限等待处理channels更好的管理方法是使用 select 语句它允许我们设置超时选项 select{case result : -chfmt.Println(Received result:, result)case -time.After(5*time.Second):fmt.Println(Timed out) }不过需要注意使用 time.After 可能会导致短期内存泄露。在某些情况下使用time.Timer 或 time.Ticker 可能更有效因为它们能让我们更好地控制时间。 译者补充关于 time.After 可能导致内存泄露的文章可参考学习 [golang]golang time.After使用不当导致内存泄露问题分析 - luoming1224 - 博客园 (cnblogs.com)Go坑time.After可能导致的内存泄露问题分析 - 九卷 - 博客园 (cnblogs.com) 本文将在接下来技巧中深入探讨替代方案及其价值。 2. 不幸得是context.Value 不是我们的朋友 context.Value 似乎是一个方便的工具因为它可以在 context 中携带一些数据然后在需要的地方取出这些数据。 这会让我们的函数签名简介明了不是吗典型的例子是这样的 func A(ctx context.Context, transactionID string){payment : db.GetPayment(ctx, transactionID)ctx : context.WithValue(ctx, payment, payment)B(ctx) }func B(ctx context.Context){...C(ctx) }func C(ctx context.Context){payment, ok : ctx.Value(payment).(payment)... }在这段代码中函数 A 获取付款记录并将其添加到 context 中 在 B 内调用的函数 C 检索此付款。这种方法避免直接通过函数 B 传递付款记录该函数不需要了解付款。 此方法看起来不错因为 允许我们省略函数传递特定不使用的数据就像 B 函数一样。允许将必要的数据保存在 context 中。避免函数签名中的额外参数。 为什么不在函数中 A 中直接调用函数 C 呢通常情况下C与B的逻辑结合得很深可能依赖它的某些计算和参数。 那么问题出在哪里呢问题就出在这里 放弃了Go在编译过程中提供的类型检查安全性。我们将数据放入黑匣子中并希望以后能再找到它而一周之后可能就像盲人搜索一样。由于隐士传递付款数据似乎可有可无但实际上非常重要。 从个人角度来看使用 ctx.Value 的主要问题在于它如何隐藏数据。这就像把东西放在一个没有明确标签的保险箱里。当然数据被保存起来了但检索数据却成了一个猜谜游戏。 明确我们正在传递的消息通常会减少以后的麻烦。 “那么什么时候适合使用 context.Value() ?” 最好限制它的使用范围但 Go 文档建议在跨API和进程间传递请求范围的值时使用它。以下是一些很好的用途 你可以考虑使用它来跟踪某些与请求相关的数据例如 跟踪请求的开始时间记录访问者的IP地址管理追踪和跨度IDs识别正在访问的HTTP路由… 上面例子中 ‘payment’ 支付数据与请求无关吗 如果 ‘payment’ 支付信息在多个函数中都很重要那么在函数参数显示传递它会更清晰、安全并且有助于任何阅读代码的人立即理解该函数直接与‘payment’支付数据交互。 一般来说最好避免在 context 中嵌入关键业务数据这种策略可以保持代码清晰度和可维护性。 3. 使用context.WithoutCancel 保持 context 活跃 当在Go中实用context时非常简单的一件就是直接使用带有取消功能的context。如果取消父级context所有子context也会被取消。 比如下面这个简单的例子 parentCtx, cancel : context.WithCancel(context.Background()) childCtx, _ : context.WithCancel(parentCtx)go func(ctx context.Context){-ctx.Done()fmt.Println(Child context done) }(childCtx)cancel()此段代码中一旦我们取消 parentCtx, childCtx 也会被取消。这通常是我们想要的但有时我们可能需要一个子context能够继续运行即使父级context被取消了。 在Go中处理HTTP请求时我们会经常遇到一个场景在处理主请求后启动goroutine处理任务如果处理不仔细可能会导致错误 func handleRequest(req *http.Request){ctx : req.Context()go hookAfterRequest(ctx) }在我们考虑处理HTTP请求时即使客户端断开连接我们仍然需要记录详细信息并收集指标而不是取消运行。 未完待翻译感兴趣可以先看原仓库英文版。喜欢给个鼓励 star 中文Go实用技巧 英文go-practical-tips
http://www.zqtcl.cn/news/979535/

相关文章:

  • 公司网站是别人做的如何换logo北京网站设计浩森宇特
  • 直播网站制作做阿里巴巴网站电话
  • 免费建一个自己的网站做国内网站花费
  • 苏州手机网站搭建郑州建设网站制作公司
  • 贵阳网站建设kuhugz沽源网站建设
  • 深圳网站seo推广河北建设工程信息网停用公告
  • 给公司建网站 深圳wordpress去掉cat
  • 网站建设推荐华网天下土巴兔装修平台怎么收费
  • 微网站 网页成品网站模块
  • soap公司网站wordpress 相关推荐
  • 浙江质监站网址固始网站建设公司
  • 济南 外贸网站建设怎么知道网站是哪个公司做的
  • 分享wordpress优秀主题东莞百度seo找谁
  • 顺德网站制作案例价位超兽vps群
  • 网站建设 搜狐号电脑赚钱的项目有哪些
  • 做生意的网站广州互联网企业100强
  • 网站单页支付宝支付怎么做网站制作公司套路
  • 本网站维护升级官方网站建设滞后
  • 网站上漂亮的甘特图是怎么做的江门seo方法
  • 局域网建设网站seo优化查询
  • 网站安装模板wordpress多个函数文件
  • 网站建设飠金手指排名十二毕业设计论文网
  • 高密哪里做网站好网络营销的四大特点
  • 网站锚文本怎么做怎么在网上接网站建设
  • php做公司网站中国大工程建设需要什么样的人才
  • 优化公司怎么优化网站的技能网站建设项目需求
  • wordpress怎么修改主页网站改版seo
  • 做视频网站需要多少带宽lnmp wordpress 数据库
  • 网站速度慢wordpress徐州网络推广公司
  • 网站建设增城seo外链是什么意思