В настоящее время я передаю контекст приложения / основного уровня от main.go
до repository.go
, чтобы я мог использовать его в качестве "родительского" контекста для go с контекстом запроса. Это действительно / idiomati c использование или нет? Кроме того, я должен отказаться от идеи и просто использовать context.Background()
в качестве «родительского» контекста для go с контекстом запроса вместо этого?
main. go
package main
import (
"context"
"internal/user"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
repo := user.NewRepository(ctx, db)
// HTTP server is running.
}
внутренний / пользователь / хранилище. go
package user
import (
"context"
"database/sql"
"time"
)
type Repository struct {
*sql.DB
}
var appCTX context.Context
func NewRepository(ctx context.Context, db *sql.DB) Repository {
appCTX = ctx
return Repository{db}
}
func (r Repository) Insert(args ...interface{}) error {
ctx, cancel := context.WithTimeout(appCTX, 5 * time.Millisecond)
defer cancel()
// Run query etc.
res, err := r.ExecContext(ctx, `INSERT INTO .....`, args...)
}