Функция context.TODO
Функция context.TODO возвращает непустой пустой контекст.
Она не имеет никакого значения и предназначена для использования
в качестве временного решения, когда неизвестно, какой контекст
следует применить. Это может быть полезно на этапе разработки
или рефакторинга, когда требуется передать контекст, но
конкретный тип еще не определен.
Синтаксис
ctx := context.TODO()
Функция не принимает никаких параметров и возвращает
значение типа context.Context.
Пример
Давайте рассмотрим использование context.TODO
в функции, которая ожидает контекст:
package main
import (
"context"
"fmt"
)
func process(ctx context.Context, data string) {
select {
case <-ctx.Done():
fmt.Println("Operation cancelled")
default:
fmt.Printf("Processing: %s\n", data)
}
}
func main() {
ctx := context.TODO()
process(ctx, "example data")
}
Результат выполнения кода:
"Processing: example data"
В этом примере context.TODO используется для
создания контекста, который передается в функцию process.
Поскольку контекст не имеет таймаута или отмены, выполнение
происходит без прерываний.
Пример
Рассмотрим ситуацию, когда контекст используется в многопоточном приложении, но конкретный контекст пока не определен:
package main
import (
"context"
"fmt"
"time"
)
func worker(ctx context.Context, id int) {
select {
case <-time.After(500 * time.Millisecond):
fmt.Printf("Worker %d finished\n", id)
case <-ctx.Done():
fmt.Printf("Worker %d cancelled\n", id)
}
}
func main() {
ctx := context.TODO()
for i := 0; i < 3; i++ {
go worker(ctx, i)
}
time.Sleep(1 * time.Second)
}
Результат выполнения кода:
"Worker 2 finished"
"Worker 1 finished"
"Worker 0 finished"
В этом примере context.TODO используется для
запуска нескольких горутин. Поскольку контекст не
поддерживает отмену, все горутины успешно завершаются.
Смотрите также
-
функцию
context.Background,
которая возвращает пустой контекст для инициализации -
функцию
context.WithCancel,
которая создает контекст с возможностью отмены -
функцию
context.WithTimeout,
которая создает контекст с таймаутом -
тип
context.Context,
который определяет интерфейс для работы с контекстом