iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Golang cli 应用程序 - 如何正确使用上下文?
  • 934
分享到

Golang cli 应用程序 - 如何正确使用上下文?

2024-02-09 10:02:23 934人浏览 八月长安
摘要

golang cli 应用程序 - 如何正确使用上下文?PHP小编鱼仔将为您介绍如何在Golang的cli应用程序中正确使用上下文。在开发cli应用程序时,上下文是非常重要的,它可以帮

golang cli 应用程序 - 如何正确使用上下文?PHP小编鱼仔将为您介绍如何在Golang的cli应用程序中正确使用上下文。在开发cli应用程序时,上下文是非常重要的,它可以帮助我们管理应用程序的状态、传递参数和错误等。本文将详细解释上下文的概念,并给出一些实际应用的示例,帮助您更好地理解和运用上下文。无论您是初学者还是有一定经验的开发者,本文都将对您有所帮助。让我们一起来深入了解Golang cli应用程序中的上下文吧!

问题内容

我是 golang 新手,对上下文以及如何在 golang 应用程序中使用上下文有些困惑。 具体来说,我正在开发 cli 应用程序,只需要访问 mongo,例如。

就像 - 我只是创建单个共享 ctx 上下文变量,然后将其用于任何需要上下文的操作,这是正确的吗?

任何需要上下文的操作都会重新启动 5 秒计时器吗?或者这是一个共享计时器?

package main

import (
    "context"
    "log"
    "os"
    "time"

    "go.mongoDB.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
    "go.mongodb.org/mongo-driver/mongo/readpref"
)

func main() {

    log.SetOutput(os.Stdout)

    // Create a context with a timeout of 5 seconds
    //This defines a timeout context that will be canceled after 5 seconds.
    ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
    // always defer in case func returns early
    defer cancel()

    //Creates a new ClientOptions instance.
    clientOptions := options.Client()
    clientOptions = clientOptions.ApplyURI("mongodb+srv://127.0.0.1?retryWrites=true&w=majority")

    //Connect to mongo
    client, err := mongo.Connect(ctx, clientOptions)
    defer client.Disconnect(ctx)
    if err != nil {
        log.Fatal(err)
    }

    //Test connection to the database
    log.Println("I: test mongo connection using ping")
    err = client.Ping(ctx, readpref.Primary())
    if err != nil {
        log.Fatal(err)
    }

    log.Println("I: Fin")
}

解决方法

如果你仔细想想,context.context 可以“水平”共享(意思是在不属于同一调用堆栈的操作之间)是没有意义的。 golang context 提供了要执行操作(包括调用堆栈中其下方的任何嵌套操作)的上下文 - 例如“在 x 秒内”,以防止由于通信延迟等而挂起。因此,如果您发出并行 10 个请求,您应该为每个请求提供自己的上下文 - 您可能不希望第十个请求失败,因为第一个请求失败了。如果您只是使用 context.background()context.todo(),没有进一步的装饰,您可能不需要在第一次创建它时将 context 存储在变量中 - 您可以在创建时创建将其传递给调用堆栈中的第一个函数,正确构造的代码将根据需要将其向下传递到堆栈,并一路应用必要的修饰:

func Execute() {
  DoThing(context.Background())
  // Other stuff
}

func DoThing(pctx context.Context) {
  ctx, cancel := context.WithTimeout(pctx, 10 * time.Second) // Timeout after 10 seconds
  defer cancel()

  DoThingThatMayTakeAWhile(ctx)
  select {
    // You may want other stuff here
    case <-ctx.Done():
      // Context timed out, maybe log an error?
  }
}

func DoThingThatMayTakeAWhile(pctx context.Context) {
  DoThingNeedingInfoInContext(context.WithValue(pctx, "thisisakey", "value"))
}

func DoThingNeedingInfoInContext(ctx context.Context) {
  val := ctx.Value("thisisakey")
  // Do something with val, check that it isn't nil, etc.
}
  

如果我要多次调用 dothingthatmaytakeawhile(),我想为每个调用提供一个单独的子上下文 - 我希望与每个调用共享 ctx。 p>

因此,在您的代码中,每次调用 mongo.connect() 都应该收到一个新创建的 context.context 实例。

以上就是Golang cli 应用程序 - 如何正确使用上下文?的详细内容,更多请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: Golang cli 应用程序 - 如何正确使用上下文?

本文链接: https://www.lsjlt.com/news/562435.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Golang cli 应用程序 - 如何正确使用上下文?
    Golang cli 应用程序 - 如何正确使用上下文?php小编鱼仔将为您介绍如何在Golang的cli应用程序中正确使用上下文。在开发cli应用程序时,上下文是非常重要的,它可以帮...
    99+
    2024-02-09
  • 如何在Python应用程序中正确使用Django容器?
    Django是一个流行的Python Web框架,它可以帮助开发人员更快地构建Web应用程序。而Docker是一种容器技术,可以让开发人员更方便地部署和管理应用程序。将Django与Docker结合起来,可以让我们更轻松地管理和部署Djan...
    99+
    2023-08-24
    容器 load django
  • GO如何使用Mutex确保并发程序正确性
    这篇“GO如何使用Mutex确保并发程序正确性”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“GO如何使用Mutex确保并发程...
    99+
    2023-07-05
  • 如何在Java应用程序中正确地配置缓存文件?
    当今的Java应用程序在处理大量数据时,缓存数据文件是非常常见和必要的。缓存可以减少对数据库的访问次数,提高系统性能。但是,如果不正确地配置缓存文件,可能会导致数据不一致、性能下降等问题。本文将介绍如何在Java应用程序中正确地配置缓存文件...
    99+
    2023-10-06
    缓存 文件 关键字
  • PHP应用程序中如何正确调用系统命令
    这篇文章主要介绍了PHP应用程序中如何正确调用系统命令的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PHP应用程序中如何正确调用系统命令文章都会有所收获,下面我们一起来看看吧。有时你需要使用 PHP 应用程序中...
    99+
    2023-07-04
  • Java应用程序如何正确处理路径缓存?
    在Java应用程序中,路径缓存是一个非常重要的概念。路径缓存可以提高应用程序的性能,并减少对文件系统的访问次数。但是,如果不正确处理路径缓存,就会导致应用程序出现问题,例如读取到错误的文件。 在本文中,我们将讨论Java应用程序如何正确处...
    99+
    2023-07-29
    path 缓存 apache
  • Linux下如何正确使用sudo命令
    这篇“Linux下如何正确使用sudo命令”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux下如何正确使用sudo命令...
    99+
    2023-06-27
  • 如何使用golang搭建web应用程序
    近年来,Go语言(简称golang)因其高效、简洁、并发安全等特点,逐渐成为了Web开发领域的宠儿。Golang易于学习和使用,并且拥有庞大的基础库和框架。本文将介绍如何使用golang搭建web应用程序,包括路由设置、模板处理、ORM等内...
    99+
    2023-05-14
  • Spring Path如何被正确打包到Java应用程序中?
    Spring Path是一个非常流行的Java Web开发框架,它提供了许多便捷的功能和工具,帮助我们更轻松地开发高质量的Web应用程序。在使用Spring Path时,我们通常需要将其正确地打包到我们的Java应用程序中,以便我们的应用程...
    99+
    2023-06-14
    打包 spring path
  • 打包Java应用程序时如何正确处理Spring Path?
    Spring是一个流行的Java框架,用于构建企业级应用程序。Spring框架使用注解和XML配置文件来管理应用程序中的各种组件,包括控制器、服务、存储库等。在Spring应用程序中,路径(Path)是一个非常重要的概念,因为它们用于映射...
    99+
    2023-06-14
    打包 spring path
  • 如何在Java应用程序中正确地使用重定向日志接口?
    在Java应用程序中,重定向日志接口是非常重要的一个功能。它可以帮助我们更好地管理应用程序的日志,以及确保日志信息能够被正确地保存和处理。在本篇文章中,我们将介绍如何在Java应用程序中正确地使用重定向日志接口。 一、重定向日志接口的基本概...
    99+
    2023-11-05
    重定向 日志 接口
  • 如何正确的使用bootstrap下拉菜单
    如何正确的使用bootstrap下拉菜单?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。单按钮下拉菜单在按钮中做一些改变,就可以作为下拉菜单。<div&nb...
    99+
    2023-06-14
  • 如何正确使用@property
    本篇内容主要讲解“如何正确使用@property”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何正确使用@property”吧!他们是这样说的:class People: ...
    99+
    2023-06-15
  • 如何正确使用WideCharToMultiByte
    要正确使用WideCharToMultiByte函数,需要按照以下步骤操作:1. 确定要转换的宽字符编码方式。WideCharToM...
    99+
    2023-09-26
    使用
  • 如何正确使用MVCC
    这篇文章主要讲解了“如何正确使用MVCC”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何正确使用MVCC”吧! 简单理解版以下先引用我之前写过的...
    99+
    2024-04-02
  • 如何在Java应用程序中正确配置日志路径?
    作为一名Java程序员,日志是我们不可避免的一部分。正确的配置日志路径可以帮助我们更好地追踪问题和调试代码。在本文中,我们将探讨如何在Java应用程序中正确配置日志路径。 在Java中,我们通常使用Log4j或Logback来记录日志。这两...
    99+
    2023-10-17
    日志 教程 path
  • 如何正确地将Spring Path打包到Java应用程序中?
    Spring Path是一个非常重要的框架,在Java应用程序开发中被广泛地使用。在本文中,我们将讨论如何正确地将Spring Path打包到Java应用程序中。 首先,让我们来了解一下什么是Spring Path。Spring Path是...
    99+
    2023-06-14
    打包 spring path
  • golang的协程上下文的具体使用
    go协程上下文context golang的context 主要用来在 goroutine 之间传递上下文信息,包括:取消信号、超时时间、截止时间、k-v 等 context是gol...
    99+
    2024-04-02
  • 如何在Gitlab上部署Golang应用程序(步骤)
    随着Golang的发展,越来越多的开发者开始使用该编程语言来开发应用程序。同时,由于持续集成和持续交付的需求越来越大,Gitlab作为一个优秀的代码托管平台得到了广泛的应用。本文将介绍如何在Gitlab上部署Golang应用程序。一、安装G...
    99+
    2023-05-14
  • 如何正确的使用Springboot配置文件
    这篇文章给大家介绍如何正确的使用Springboot配置文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。如果使用IDEA创建Springboot项目,默认会在resource目录下创建application.prop...
    99+
    2023-05-31
    springboot bo
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作