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 중국어 웹사이트의 기타 관련 기사를 참조하세요!