Documentation
¶
Index ¶
- func ToSnakeCase(str string) string
- type App
- func (a *App) DELETE(pattern string, handler Handler)
- func (a *App) GET(pattern string, handler Handler)
- func (a *App) POST(pattern string, handler Handler)
- func (a *App) PUT(pattern string, handler Handler)
- func (a *App) RegisterService(desc *grpc.ServiceDesc, impl interface{})
- func (a *App) Run()
- func (a *App) SubCommand(pattern string, handler Handler)
- type Config
- type Container
- type Context
- type DB
- type ErrCommandNotFound
- type Handler
- type Request
- type Responder
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ToSnakeCase ¶
Types ¶
type App ¶
type App struct { // Config can be used by applications to fetch custom configurations from environment or file. Config Config // If we directly embed, unnecessary confusion between app.Get and app.GET will happen. HttpServer *httpServer // contains filtered or unexported fields }
App is the main application in the gofr framework.
func (*App) RegisterService ¶
func (a *App) RegisterService(desc *grpc.ServiceDesc, impl interface{})
RegisterService adds a grpc service to the gofr application.
func (*App) Run ¶
func (a *App) Run()
Run starts the application. If it is a HTTP server, it will start the server.
func (*App) SubCommand ¶
SubCommand adds a sub-command to the CLI application. Can be used to create commands like "kubectl get" or "kubectl get ingress".
type Container ¶
Container is a collection of all common application level concerns. Things like Logger, Connection Pool for Redis etc which is shared across is placed here.
type Context ¶
type Context struct { ctx.Context // Request needs to be public because handlers need to access request details. Else, we need to provide all // functionalities of the Request as a method on context. This is not needed because Request here is an interface // So, internals are not exposed anyway. Request // Same logic as above. *Container // contains filtered or unexported fields }
func (*Context) Trace ¶
Trace returns an open telemetry span. We have to always close the span after corresponding work is done. Usages:
span := c.Trace("Some Work") // Do some work here. defer span.End()
If an entire function has to traced as span, we can use a simpler format:
defer c.Trace("ExampleHandler").End()
We can write this at the start of function and because of how defer works, trace will start at that line but End will be called after function ends.
Developer Note: If you chain methods in a defer statement, everything except the last function will be evaluated at call time.
type DB ¶
DB is a wrapper around sql.DB which provides some more features.
func (*DB) Select ¶
Select runs a query with args and binds the result of the query to the data. data should ba a point to a slice, struct or any type. Slice will return multiple objects whereas struct will return a single object.
Example Usages:
- Get multiple rows with only one column ids := make([]int, 0) db.Select(ctx, &ids, "select id from users")
- Get a single object from database type user struct { Name string ID int Image string } u := user{} db.Select(ctx, &u, "select * from users where id=?", 1)
- Get array of objects from multiple rows type user struct { Name string ID int Image string `db:"image_url"` } users := []user{} db.Select(ctx, &users, "select * from users")
type ErrCommandNotFound ¶
type ErrCommandNotFound struct{}
func (ErrCommandNotFound) Error ¶
func (e ErrCommandNotFound) Error() string
type Request ¶
type Request interface { Context() context.Context Param(string) string PathParam(string) string Bind(interface{}) error Header(string) string }
Request is an interface which is written because it allows us to create applications without being aware of the transport. In both cmd or server application, this abstraction can be used.