El buen marco
Captura de pantalla de métricas del stand de pruebas a largo plazo de Gramework realizada con Gramework Stats Dashboard y middleware de métricas
Gramework es un marco web go-way rápido, altamente eficaz y confiable, primero en SPA, creado por un mantenedor fasthttp. Obtiene la API simple pero poderosa, manejamos las optimizaciones internamente. Siempre nos alegra ver sus solicitudes de funciones y relaciones públicas.
Razones para utilizar Gramework
Go >= 1.10.8 es la versión más antigua que se prueba y admite continuamente.
Si encuentra alguna vulnerabilidad, no dude en enviarla a través de [email protected].
Nombre | Enlace/Insignia |
---|---|
Documentos | GoDoc |
Nuestra Jira | Jira |
Informe de licencia | Informe |
Registro de cambios | Registro de cambios |
Apóyanos con una donación o conviértete en patrocinador | Colectivo Abierto |
Nuestro chat de Telegram | @gramework |
Nuestro canal #gramework en Gophers Slack | https://gophers.slack.com |
Nuestro servidor de discordia | https://discord.gg/HkW8DsD |
Cobertura de sucursal principal | |
Estado de la sucursal maestra | |
Cobertura de sucursales de desarrollo | |
Estado de la rama de desarrollo | |
Mejores prácticas de ICI | |
Panel de estadísticas de Gramework para Grafana | https://grafana.com/dashboards/3422 |
Contactos de soporte | Por correo electrónico: [email protected] |
Vía comunidad de Telegram: @gramework |
¡Este proyecto existe gracias a nuestros increíbles contribuyentes! [Contribuir].
¡Gracias a todos nuestros patrocinadores! [Conviértete en patrocinador]
Apoya este proyecto convirtiéndote en patrocinador. Su logotipo aparecerá aquí con un enlace a su sitio web. [Conviértete en patrocinador]
/third_party_licenses/fasthttp
y /third_party_licenses/fasthttprouter
.nettls_*.go
, es una versión integrada de caddytls, porque usarlo a través de una simple importación no es una opción, el programa se basa en fasthttp
, que es incompatible con net/http
. En la confirmación en la que me basé, caddy tiene licencia Apache-2.0
. Su licencia colocada en /third_party_licenses/caddy
. @mholt nos permite copiar el código en este repositorio. El siguiente ejemplo servirá para "hola, grameworld". Gramework registrará el indicador bind
por usted, que le permitirá elegir otra IP/puerto en el que Gramework debería escuchar:
package main
import (
"github.com/gramework/gramework"
)
func main () {
app := gramework . New ()
app . GET ( "/" , "hello, grameworld" )
app . ListenAndServe ()
}
Si no desea admitir el indicador bind
, pase el argumento de dirección opcional a ListenAndServe
.
NOTA : todos los ejemplos siguientes registrarán el indicador bind
.
De la versión: 1.1.0-rc1
El siguiente ejemplo mostrará {"hello":"grameworld"}
del mapa. Gramework registrará el indicador bind
por usted, que le permitirá elegir otra IP/puerto en el que Gramework debería escuchar:
package main
import (
"github.com/gramework/gramework"
)
func main () {
app := gramework . New ()
app . GET ( "/" , func () map [ string ] interface {} {
return map [ string ] interface {}{
"hello" : "gramework" ,
}
})
app . ListenAndServe ()
}
De la versión: 1.1.0-rc1
El siguiente ejemplo servirá {"hello":"grameworld"}
de la estructura. Gramework registrará el indicador bind
por usted, que le permitirá elegir otra IP/puerto en el que Gramework debería escuchar:
package main
import (
"github.com/gramework/gramework"
)
type SomeResponse struct {
hello string
}
func main () {
app := gramework . New ()
app . GET ( "/" , func () interface {} {
return SomeResponse {
hello : "gramework" ,
}
})
app . ListenAndServe ()
}
El siguiente ejemplo servirá archivos estáticos desde ./files
:
package main
import (
"github.com/gramework/gramework"
)
func main () {
app := gramework . New ()
app . GET ( "/*any" , app . ServeDir ( "./files" ))
app . ListenAndServe ()
}
El siguiente ejemplo servirá para un segmento de bytes:
package main
import (
"fmt"
"os"
"time"
"github.com/gramework/gramework"
)
type SomeData struct {
Name string
Age uint8
}
func main () {
app := gramework . New ()
d := SomeData {
Name : "Grame" ,
Age : 20 ,
}
// service-wide CORS. you can also instead of using middleware
// call ctx.CORS() manually
app . Use ( app . CORSMiddleware ())
app . GET ( "/someJSON" , func ( ctx * gramework. Context ) {
// send json, no metter if user asked for json, xml or anything else.
if err := ctx . JSON ( d ); err != nil {
// you can return err instead of manual checks and Err500() call.
// See next handler for example.
ctx . Err500 ()
}
})
app . GET ( "/simpleJSON" , func ( ctx * gramework. Context ) error {
return ctx . JSON ( d )
})
app . GET ( "/someData" , func ( ctx * gramework. Context ) error {
// send data in one of supported encodings user asked for.
// Now we support json, xml and csv. More coming soon.
sentType , err := ctx . Encode ( d )
if err != nil {
ctx . Logger . WithError ( err ). Error ( "could not process request" )
return err
}
ctx . Logger . WithField ( "sentType" , sentType ). Debug ( "some request-related message" )
return nil
})
// you can omit context if you want, return `interface{}`, `error` or both.
app . GET ( "/simplestJSON" , func () interface {} {
return d
})
// you can also use one of built-in types as a handler, we got you covered too
app . GET ( "/hostnameJSON" , fmt . Sprintf ( `{"hostname": %q}` , os . Hostname ()))
wait := make ( chan struct {})
go func () {
time . Sleep ( 10 * time . Minute )
app . Shutdown ()
wait <- struct {}{}
}()
app . ListenAndServe ()
// allow Shutdown() to stop the app properly.
// ListenAndServe will return before Shutdown(), so we should wait.
<- wait
}
Este ejemplo demuestra cómo migrar de fasthttp a gramwork sin reescribir los controladores.
package main
import (
"github.com/gramework/gramework"
"github.com/valyala/fasthttp"
)
func main () {
app := gramework . New ()
app . GET ( "/someJSON" , func ( ctx * fasthttp. RequestCtx ) {
ctx . WriteString ( "another data" )
})
app . ListenAndServe ()
}