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

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

WBOY
WBOY앞으로
2024-02-09 10:42:20907검색

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으로 문의하시기 바랍니다. 삭제
이전 기사:Golang 다중 json다음 기사:Golang 다중 json