Golang cli 애플리케이션 - 컨텍스트를 올바르게 사용하는 방법은 무엇입니까?

WBOY
풀어 주다: 2024-02-09 10:42:20
앞으로
912명이 탐색했습니다.

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

Golang cli 애플리케이션 - 컨텍스트를 올바르게 사용하는 방법은 무엇입니까? PHP 편집자 Yuzai가 Golang의 cli 애플리케이션에서 컨텍스트를 올바르게 사용하는 방법을 소개합니다. CLI 애플리케이션을 개발할 때 컨텍스트는 매우 중요하며 애플리케이션 상태를 관리하고 매개변수 및 오류를 전달하는 데 도움이 될 수 있습니다. 이 기사에서는 컨텍스트의 개념을 자세히 설명하고 컨텍스트를 더 잘 이해하고 사용하는 데 도움이 되는 몇 가지 실제 적용 사례를 제공합니다. 당신이 초보자이건 숙련된 개발자이건 이 글이 도움이 될 것입니다. Golang cli 애플리케이션의 컨텍스트를 살펴보겠습니다!

질문 내용

저는 golang을 처음 접했고 컨텍스트와 golang 애플리케이션에서 컨텍스트를 사용하는 방법에 대해 약간 혼란스러워했습니다. 특히, 예를 들어 저는 mongo에만 액세스하면 되는 cli 애플리케이션을 개발하고 있습니다.

좋아요 - 단일 공유 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은 변수에 저장됩니다. 생성 시 생성하여 호출 스택의 첫 번째 함수에 전달할 수 있으며, 적절하게 구성된 코드는 필요에 따라 이를 전달할 것입니다. 그 과정에서 필요한 수정 사항을 쌓고 적용하세요.

으아악

내가 dothingthatmaytakeawhile(),我想为每个调用提供一个单独的子上下文 - 我希望与每个调用共享 ctx 여러 번 전화하고 싶다면. p>

그러므로 귀하의 코드에서 mongo.connect() 都应该收到一个新创建的 context.context인스턴스가 호출될 때마다.

위 내용은 Golang cli 애플리케이션 - 컨텍스트를 올바르게 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!