frame

package module
v1.62.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 24, 2025 License: Apache-2.0 Imports: 70 Imported by: 29

README

frame Build Status Ask DeepWiki

A simple frame for quickly setting up api servers based on gocloud framework.

Features include:

  • An http server
  • A grpc server
  • Database setup using Gorm with migrations and multitenancy support
  • Easy queue publish and subscription support
  • Localization
  • Authentication adaptor for oauth2 and jwt access
  • Authorization adaptor

The goal of this project is to simplify starting up servers with minimal boiler plate code. All components are very pluggable with only the necessary configured items loading at runtime thanks to the power of go-cloud under the hood.

Getting started:

    go get -u github.com/pitabwire/frame

Example

import (
	"context"
	"fmt"
	"github.com/gorilla/mux"
	"github.com/pitabwire/frame"
	"log"
	"net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Frame says yelloo!")
}


func main() {

	serviceName := "service_authentication"
	ctx := context.Background()

	router := mux.NewRouter().StrictSlash(true)
	router.HandleFunc("/", handler)

	server := frame.HttpHandler(router)
	service := frame.NewService(serviceName,server)
	err := service.Run(ctx, ":7654")
	if err != nil {
		log.Fatal("main -- Could not run Server : %v", err)
	}

}

Detailed guides can be found here

development

To run tests start the docker compose file in ./tests then run :

    go test -json -cover ./...

Documentation

Index

Constants

View Source
const (
	PostgresScheme = "postgres"
)

Constants for database drivers.

Variables

View Source
var ErrHealthCheckFailed = errors.New("health check failed")
View Source
var ErrTLSPathsNotProvided = errors.New("TLS certificate path or key path not provided")

Functions

func ErrIsNotFound added in v1.59.8

func ErrIsNotFound(err error) bool

ErrIsNotFound checks if an error represents a "not found" condition. It handles multiple error types: - Database errors: gorm.ErrRecordNotFound, sql.ErrNoRows (via ErrorIsNoRows) - gRPC errors: codes.NotFound - Generic errors: error messages containing "not found" (case-insensitive).

func ErrorIsNoRows added in v1.33.0

func ErrorIsNoRows(err error) bool

ErrorIsNoRows validate if supplied error is because of record missing in DB.

func NewGrpcHealthServer added in v1.13.3

func NewGrpcHealthServer(service *Service) grpc_health_v1.HealthServer

func SubmitJob added in v1.28.0

func SubmitJob[T any](ctx context.Context, s *Service, job workerpool.Job[T]) error

SubmitJob used to submit jobs to our worker pool for processing. Once a job is submitted the end user does not need to do any further tasks One can ideally also wait for the results of their processing for their specific job by listening to the job's ResultChan.

func ToContext

func ToContext(ctx context.Context, service *Service) context.Context

ToContext pushes a service instance into the supplied context for easier propagation.

Types

type BaseModel

type BaseModel struct {
	ID          string `gorm:"type:varchar(50);primary_key"`
	CreatedAt   time.Time
	ModifiedAt  time.Time
	Version     uint           `gorm:"DEFAULT 0"`
	TenantID    string         `gorm:"type:varchar(50);index:,composite:base_tenancy"`
	PartitionID string         `gorm:"type:varchar(50);index:,composite:base_tenancy"`
	AccessID    string         `gorm:"type:varchar(50);index:,composite:base_tenancy"`
	DeletedAt   gorm.DeletedAt `sql:"index"`
}

BaseModel base table struct to be extended by other models.

func (*BaseModel) BeforeCreate

func (model *BaseModel) BeforeCreate(db *gorm.DB) error

func (*BaseModel) BeforeSave added in v1.2.9

func (model *BaseModel) BeforeSave(db *gorm.DB) error

BeforeSave Ensures we update a migrations time stamps.

func (*BaseModel) BeforeUpdate

func (model *BaseModel) BeforeUpdate(_ *gorm.DB) error

BeforeUpdate Updates time stamp every time we update status of a migration.

func (*BaseModel) CopyPartitionInfo added in v1.18.3

func (model *BaseModel) CopyPartitionInfo(parent *BaseModel)

func (*BaseModel) GenID added in v1.2.5

func (model *BaseModel) GenID(ctx context.Context)

GenID creates a new id for model if its not existent.

func (*BaseModel) GetID

func (model *BaseModel) GetID() string

func (*BaseModel) GetVersion added in v1.7.3

func (model *BaseModel) GetVersion() uint

func (*BaseModel) ValidXID added in v1.7.0

func (model *BaseModel) ValidXID(id string) bool

ValidXID Validates that the supplied string is an xid.

type BaseModelI

type BaseModelI interface {
	GetID() string
	GetVersion() uint
}

type Checker added in v1.7.13

type Checker interface {
	CheckHealth() error
}

Checker wraps the CheckHealth method.

CheckHealth returns nil if the resource is healthy, or a non-nil error if the resource is not healthy. CheckHealth must be safe to call from multiple goroutines.

type CheckerFunc added in v1.7.13

type CheckerFunc func() error

CheckerFunc is an adapter type to allow the use of ordinary functions as health checks. If f is a function with the appropriate signature, CheckerFunc(f) is a Checker that calls f.

func (CheckerFunc) CheckHealth added in v1.7.13

func (f CheckerFunc) CheckHealth() error

CheckHealth calls f().

type DataSource added in v1.50.0

type DataSource string

A DataSource for conveniently handling a URI connection string.

func (DataSource) ChangePort added in v1.54.8

func (d DataSource) ChangePort(newPort string) (DataSource, error)

func (DataSource) DelPath added in v1.50.0

func (d DataSource) DelPath() DataSource

func (DataSource) ExtendPath added in v1.50.0

func (d DataSource) ExtendPath(epath ...string) DataSource

func (DataSource) ExtendQuery added in v1.50.0

func (d DataSource) ExtendQuery(key, value string) DataSource

func (DataSource) GetQuery added in v1.50.0

func (d DataSource) GetQuery(key string) string

func (DataSource) IsCache added in v1.50.0

func (d DataSource) IsCache() bool

func (DataSource) IsDB added in v1.50.0

func (d DataSource) IsDB() bool

func (DataSource) IsMem added in v1.50.0

func (d DataSource) IsMem() bool

func (DataSource) IsMySQL added in v1.50.0

func (d DataSource) IsMySQL() bool

func (DataSource) IsNats added in v1.50.0

func (d DataSource) IsNats() bool

func (DataSource) IsPostgres added in v1.50.0

func (d DataSource) IsPostgres() bool

func (DataSource) IsQueue added in v1.50.0

func (d DataSource) IsQueue() bool

func (DataSource) IsRedis added in v1.50.0

func (d DataSource) IsRedis() bool

func (DataSource) PrefixPath added in v1.50.0

func (d DataSource) PrefixPath(prefix string) DataSource

func (DataSource) RemoveQuery added in v1.50.0

func (d DataSource) RemoveQuery(key ...string) DataSource

func (DataSource) String added in v1.50.0

func (d DataSource) String() string

func (DataSource) SuffixPath added in v1.50.0

func (d DataSource) SuffixPath(suffix string) DataSource

func (DataSource) ToArray added in v1.50.0

func (d DataSource) ToArray() []DataSource

func (DataSource) ToURI added in v1.50.0

func (d DataSource) ToURI() (*url.URL, error)

func (DataSource) WithPassword added in v1.50.0

func (d DataSource) WithPassword(password string) (DataSource, error)

func (DataSource) WithPath added in v1.50.0

func (d DataSource) WithPath(path string) (DataSource, error)

func (DataSource) WithPathSuffix added in v1.50.0

func (d DataSource) WithPathSuffix(suffix string) (DataSource, error)

func (DataSource) WithQuery added in v1.50.0

func (d DataSource) WithQuery(query string) (DataSource, error)

func (DataSource) WithUser added in v1.50.0

func (d DataSource) WithUser(user string) (DataSource, error)

func (DataSource) WithUserAndPassword added in v1.50.0

func (d DataSource) WithUserAndPassword(userName, password string) (DataSource, error)

type DatastoreMigrator added in v1.43.0

type DatastoreMigrator struct {
	// contains filtered or unexported fields
}

func (*DatastoreMigrator) ApplyNewMigrations added in v1.43.0

func (m *DatastoreMigrator) ApplyNewMigrations(ctx context.Context) error

func (*DatastoreMigrator) DB added in v1.43.0

func (m *DatastoreMigrator) DB(ctx context.Context) *gorm.DB

func (*DatastoreMigrator) SaveMigrationString added in v1.43.0

func (m *DatastoreMigrator) SaveMigrationString(
	ctx context.Context,
	filename string,
	migrationPatch string,
	revertPatch string,
) error

type JSONMap added in v1.49.0

type JSONMap map[string]any

JSONMap is a GORM-compatible map[string]any that stores JSONB/JSON in a DB.

func (*JSONMap) Copy added in v1.58.5

func (m *JSONMap) Copy() JSONMap

Copy returns a deep copy of the JSONMap. Nested maps and slices are recursively copied so that the returned JSONMap can be modified without affecting the original.

func (*JSONMap) FromProtoStruct added in v1.58.2

func (m *JSONMap) FromProtoStruct(s *structpb.Struct) JSONMap

FromProtoStruct populates the JSONMap with data from a protocol buffer Struct. If the receiver is nil, a new JSONMap will be created and returned. If the input struct is nil, the receiver is returned unchanged. Returns the receiver (or a new JSONMap if receiver was nil) for method chaining.

func (*JSONMap) GetFloat added in v1.58.7

func (m *JSONMap) GetFloat(key string) float64

GetFloat retrieves a string value from the JSONMap by key. It returns the string and a boolean indicating if the value was found and is a string.

func (*JSONMap) GetString added in v1.58.5

func (m *JSONMap) GetString(key string) string

GetString retrieves a string value from the JSONMap by key. It returns the string and a boolean indicating if the value was found and is a string.

func (*JSONMap) GormDBDataType added in v1.49.0

func (m *JSONMap) GormDBDataType(db *gorm.DB, _ *schema.Field) string

GormDBDataType returns the dialect-specific database column type.

func (*JSONMap) GormDataType added in v1.49.0

func (m *JSONMap) GormDataType() string

GormDataType returns the common GORM data type.

func (*JSONMap) GormValue added in v1.49.0

func (m *JSONMap) GormValue(_ context.Context, db *gorm.DB) clause.Expr

GormValue optimizes how values are rendered in SQL for specific dialects.

func (*JSONMap) MarshalJSON added in v1.49.0

func (m *JSONMap) MarshalJSON() ([]byte, error)

MarshalJSON customizes the JSON encoding.

func (*JSONMap) Scan added in v1.49.0

func (m *JSONMap) Scan(value any) error

Scan implements the sql.Scanner interface for database deserialization.

func (*JSONMap) ToProtoStruct added in v1.58.2

func (m *JSONMap) ToProtoStruct() *structpb.Struct

ToProtoStruct converts a JSONMap into a structpb.Struct safely and efficiently.

func (*JSONMap) UnmarshalJSON added in v1.49.0

func (m *JSONMap) UnmarshalJSON(data []byte) error

UnmarshalJSON deserializes JSON into the map.

func (*JSONMap) Update added in v1.58.4

func (m *JSONMap) Update(update JSONMap) JSONMap

Update merges all key-value pairs from update into the receiver. If the receiver is nil, a new JSONMap is created. Keys in update overwrite existing keys in the receiver.

func (*JSONMap) Value added in v1.49.0

func (m *JSONMap) Value() (driver.Value, error)

Value implements the driver.Valuer interface for database serialization.

type Migration

type Migration struct {
	BaseModel

	Name        string `gorm:"type:text;uniqueIndex:idx_migrations_name"`
	Patch       string `gorm:"type:text"`
	RevertPatch string `gorm:"type:text"`
	AppliedAt   sql.NullTime
}

Migration Our simple table holding all the migration data.

type MigrationPatch added in v1.31.7

type MigrationPatch struct {
	// Name is a simple description/name of this migration.
	Name string
	// Patch is the SQL to execute for an upgrade.
	Patch string
	// RevertPatch is the SQL to execute for a downgrade.
	RevertPatch string
}

type Option

type Option func(ctx context.Context, service *Service)

func WithBackgroundConsumer added in v1.43.0

func WithBackgroundConsumer(deque func(_ context.Context) error) Option

WithBackgroundConsumer sets a background consumer function for the worker pool.

func WithCache added in v1.62.0

func WithCache(name string, rawCache cache.RawCache) Option

WithCache adds a raw cache with the given name to the service.

func WithCacheManager added in v1.62.0

func WithCacheManager() Option

WithCacheManager adds a cache manager to the service.

func WithConfig added in v1.42.0

func WithConfig(config any) Option

WithConfig Option that helps to specify or override the configuration object of our service.

func WithDatastore added in v1.42.0

func WithDatastore() Option

func WithDatastoreConnection added in v1.42.0

func WithDatastoreConnection(postgresqlConnection string, readOnly bool) Option

WithDatastoreConnection Option method to store a connection that will be utilized when connecting to the database.

func WithDatastoreConnectionWithName added in v1.42.0

func WithDatastoreConnectionWithName(name string, postgresqlConnection string, readOnly bool) Option

func WithDisableTracing added in v1.50.1

func WithDisableTracing() Option

WithDisableTracing disable tracing for the service.

func WithDriver added in v1.56.1

func WithDriver(driver ServerDriver) Option

WithDriver setsup a driver, mostly useful when writing tests against the frame service.

func WithEnableGRPCServerReflection added in v1.43.0

func WithEnableGRPCServerReflection() Option

WithEnableGRPCServerReflection enables gRPC server reflection.

func WithEnvironment added in v1.55.0

func WithEnvironment(environment string) Option

WithEnvironment specifies the environment the service will utilize.

func WithGRPCPort added in v1.43.0

func WithGRPCPort(port string) Option

WithGRPCPort specifies the gRPC port for the server to bind to.

func WithGRPCServer added in v1.43.0

func WithGRPCServer(grpcServer *grpc.Server) Option

WithGRPCServer specifies an instantiated gRPC server with an implementation that can be utilized to handle incoming requests.

func WithGRPCServerListener added in v1.43.0

func WithGRPCServerListener(listener net.Listener) Option

WithGRPCServerListener specifies a user-preferred gRPC listener instead of the default provided one.

func WithHTTPClient added in v1.59.1

func WithHTTPClient(opts ...client.HTTPOption) Option

WithHTTPClient configures the HTTP client used by the service. This allows customizing the HTTP client's behavior such as timeout, transport, etc.

func WithHTTPHandler added in v1.43.0

func WithHTTPHandler(h http.Handler) Option

WithHTTPHandler specifies an HTTP handlers that can be used to handle inbound HTTP requests.

func WithHealthCheckPath added in v1.42.0

func WithHealthCheckPath(path string) Option

WithHealthCheckPath Option checks that the system is up and running.

func WithInMemoryCache added in v1.62.0

func WithInMemoryCache(name string) Option

WithInMemoryCache adds an in-memory cache with the given name.

func WithLogger added in v1.38.0

func WithLogger(opts ...util.Option) Option

WithLogger Option that helps with initialization of our internal dbLogger.

func WithMetricsReader added in v1.50.1

func WithMetricsReader(reader sdkmetrics.Reader) Option

WithMetricsReader specifies the metrics reader for the service.

func WithName added in v1.55.0

func WithName(name string) Option

WithName specifies the name the service will utilize.

func WithPropagationTextMap added in v1.50.1

func WithPropagationTextMap(carrier propagation.TextMapPropagator) Option

WithPropagationTextMap specifies the trace baggage carrier exporter to use.

func WithRegisterEvents added in v1.42.0

func WithRegisterEvents(evt ...events.EventI) Option

WithRegisterEvents registers events for the service. All events are unique and shouldn't share a name otherwise the last one registered will take precedence.

func WithRegisterPublisher added in v1.42.0

func WithRegisterPublisher(reference string, queueURL string) Option

WithRegisterPublisher Option to register publishing path referenced within the system.

func WithRegisterServerOauth2Client added in v1.62.1

func WithRegisterServerOauth2Client() Option

func WithRegisterSubscriber added in v1.42.0

func WithRegisterSubscriber(reference string, queueURL string,
	handlers ...queue.SubscribeWorker) Option

WithRegisterSubscriber Option to register a new subscription handlers.

func WithTraceExporter added in v1.42.0

func WithTraceExporter(exporter sdktrace.SpanExporter) Option

WithTraceExporter specifies the trace exporter to use.

func WithTraceLogsExporter added in v1.50.1

func WithTraceLogsExporter(exporter sdklogs.Exporter) Option

WithTraceLogsExporter specifies the trace logs exporter for the service.

func WithTraceSampler added in v1.42.0

func WithTraceSampler(sampler sdktrace.Sampler) Option

WithTraceSampler specifies the trace sampler to use.

func WithTranslation added in v1.62.0

func WithTranslation(translationsFolder string, languages ...string) Option

WithTranslation Option that helps to specify or override the configuration object of our service.

func WithVersion added in v1.55.0

func WithVersion(version string) Option

WithVersion specifies the version the service will utilize.

func WithWorkerPoolOptions added in v1.43.0

func WithWorkerPoolOptions(options ...workerpool.Option) Option

WithWorkerPoolOptions provides a way to set custom options for the ants worker pool. Renamed from WithAntsOptions and changed parameter type.

type Pool added in v1.31.1

type Pool struct {
	// contains filtered or unexported fields
}

func (*Pool) CanMigrate added in v1.31.3

func (s *Pool) CanMigrate() bool

func (*Pool) CheckHealth added in v1.31.1

func (s *Pool) CheckHealth() error

CheckHealth iterates all known DBs, pings them, and updates pool membership accordingly.

func (*Pool) DB added in v1.31.1

func (s *Pool) DB(ctx context.Context, readOnly bool) *gorm.DB

DB Returns a random item from the slice, or an error if the slice is empty.

func (*Pool) SetPoolConfig added in v1.31.1

func (s *Pool) SetPoolConfig(maxOpen, maxIdle int, maxLifetime time.Duration)

SetPoolConfig updates pool sizes and connection lifetimes at runtime for all DBs.

type ServerDriver added in v1.56.0

type ServerDriver interface {
	driver.Server
	driver.TLSServer
}

type Service

type Service struct {
	// contains filtered or unexported fields
}

Service framework struct to hold together all application components An instance of this type scoped to stay for the lifetime of the application. It is pushed and pulled from contexts to make it easy to pass around.

func FromContext

func FromContext(ctx context.Context) *Service

FromContext obtains a service instance being propagated through the context.

func NewService

func NewService(name string, opts ...Option) (context.Context, *Service)

NewService creates a new instance of Service with the name and supplied options. Internally it calls NewServiceWithContext and creates a background context for use.

func NewServiceWithContext added in v1.25.3

func NewServiceWithContext(ctx context.Context, name string, opts ...Option) (context.Context, *Service)

NewServiceWithContext creates a new instance of Service with context, name and supplied options It is used together with the Init option to setup components of a service that is not yet running.

func (*Service) AddCleanupMethod

func (s *Service) AddCleanupMethod(f func(ctx context.Context))

AddCleanupMethod Adds user defined functions to be run just before completely stopping the service. These are responsible for properly and gracefully stopping active components.

func (*Service) AddHealthCheck

func (s *Service) AddHealthCheck(checker Checker)

AddHealthCheck Adds health checks that are run periodically to ascertain the system is ok The arguments are implementations of the checker interface and should work with just about any system that is given to them.

func (*Service) AddPreStartMethod added in v1.1.3

func (s *Service) AddPreStartMethod(f func(ctx context.Context, s *Service))

AddPreStartMethod Adds user defined functions that can be run just before the service starts receiving requests but is fully initialized.

func (*Service) AddPublisherStartup added in v1.62.0

func (s *Service) AddPublisherStartup(f func(ctx context.Context, s *Service))

AddPublisherStartup Adds publisher initialization functions that run before subscribers.

func (*Service) AddStartupError added in v1.62.0

func (s *Service) AddStartupError(err error)

AddStartupError stores errors that occur during startup initialization.

func (*Service) AddSubscriberStartup added in v1.62.0

func (s *Service) AddSubscriberStartup(f func(ctx context.Context, s *Service))

AddSubscriberStartup Adds subscriber initialization functions that run after publishers.

func (*Service) CacheManager added in v1.62.0

func (s *Service) CacheManager() cache.Manager

CacheManager returns the service's cache manager.

func (*Service) Config added in v1.7.13

func (s *Service) Config() any

func (*Service) DB

func (s *Service) DB(ctx context.Context, readOnly bool) *gorm.DB

DB returns the database connection for the service.

func (*Service) DBPool added in v1.31.1

func (s *Service) DBPool(name ...string) *Pool

func (*Service) DBWithName added in v1.31.0

func (s *Service) DBWithName(ctx context.Context, name string, readOnly bool) *gorm.DB

func (*Service) Emit added in v1.6.1

func (s *Service) Emit(ctx context.Context, name string, payload any) error

Emit a simple method used to deploy.

func (*Service) Environment added in v1.7.13

func (s *Service) Environment() string

Environment gets the runtime environment of the service.

func (*Service) GetRawCache added in v1.62.0

func (s *Service) GetRawCache(name string) (cache.RawCache, bool)

GetRawCache is a convenience method to get a raw cache by name from the service.

func (*Service) GetStartupErrors added in v1.62.0

func (s *Service) GetStartupErrors() []error

GetStartupErrors returns all errors that occurred during startup.

func (*Service) H added in v1.12.5

func (s *Service) H() http.Handler

func (*Service) HTTPClient added in v1.59.0

func (s *Service) HTTPClient() *http.Client

HTTPClient obtains an instrumented http client for making appropriate calls downstream.

func (*Service) HandleHealth added in v1.12.5

func (s *Service) HandleHealth(w http.ResponseWriter, _ *http.Request)

HandleHealth returns 200 if it is healthy, 500 otherwise.

func (*Service) HandleHealthByDefault added in v1.12.6

func (s *Service) HandleHealthByDefault(w http.ResponseWriter, r *http.Request)

HandleHealthByDefault returns 200 if it is healthy, 500 when there is an err or 404 otherwise.

func (*Service) HealthCheckers added in v1.7.13

func (s *Service) HealthCheckers() []Checker

func (*Service) Init added in v1.0.4

func (s *Service) Init(ctx context.Context, opts ...Option)

Init evaluates the options provided as arguments and supplies them to the service object. If called after initial startup, it will execute any new startup methods immediately.

func (*Service) Localization added in v1.62.0

func (s *Service) Localization() localization.Manager

func (*Service) Log added in v1.41.0

func (s *Service) Log(ctx context.Context) *util.LogEntry

func (*Service) MigrateDatastore

func (s *Service) MigrateDatastore(ctx context.Context, migrationsDirPath string, migrations ...any) error

MigrateDatastore finds missing migrations and records them in the database.

func (*Service) MigratePool added in v1.31.7

func (s *Service) MigratePool(ctx context.Context, pool *Pool, migrationsDirPath string, migrations ...any) error

MigratePool finds missing migrations and records them in the database.

func (*Service) Name added in v1.4.0

func (s *Service) Name() string

Name gets the name of the service. Its the first argument used when NewService is called.

func (*Service) NewMigrator added in v1.43.0

func (s *Service) NewMigrator(ctx context.Context, poolOpts ...*Pool) *DatastoreMigrator

func (*Service) Queue added in v1.62.0

func (s *Service) Queue(_ context.Context) queue.Manager

func (*Service) Run

func (s *Service) Run(ctx context.Context, address string) error

Run keeps the service useful by handling incoming requests.

func (*Service) SLog added in v1.38.0

func (s *Service) SLog(ctx context.Context) *slog.Logger

func (*Service) SaveMigration added in v1.31.7

func (s *Service) SaveMigration(ctx context.Context, migrationPatches ...*MigrationPatch) error

func (*Service) SaveMigrationWithPool added in v1.31.7

func (s *Service) SaveMigrationWithPool(ctx context.Context, pool *Pool, migrationPatches ...*MigrationPatch) error

func (*Service) Security added in v1.62.0

func (s *Service) Security() security.Manager

func (*Service) Stop

func (s *Service) Stop(ctx context.Context)

Stop Used to gracefully run clean up methods ensuring all requests that were being handled are completed well without interuptions.

func (*Service) TLSEnabled added in v1.13.0

func (s *Service) TLSEnabled() bool

func (*Service) Version added in v1.7.13

func (s *Service) Version() string

Version gets the release version of the service.

func (*Service) WorkManager added in v1.62.0

func (s *Service) WorkManager() workerpool.Manager

type Tracer added in v1.59.3

type Tracer interface {
	Start(ctx context.Context, methodName string, options ...trace.SpanStartOption) (context.Context, trace.Span)
	End(ctx context.Context, span trace.Span, err error, options ...trace.SpanEndOption)
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL