Der gute Rahmen
Screenshot der Gramework-Langzeitteststandmetriken, erstellt mit dem Gramework Stats Dashboard und der Metrik-Middleware
Gramework ist ein schnelles, äußerst effektives, zuverlässiges SPA-First-Go-Way-Webframework, das von einem Fasthttp-Betreuer erstellt wurde. Sie erhalten die einfache, aber leistungsstarke API, Optimierungen übernehmen wir intern. Wir freuen uns immer über Ihre Feature-Anfragen und PRs.
Gründe für die Nutzung von Gramework
Go >= 1.10.8 ist die älteste kontinuierlich getestete und unterstützte Version.
Wenn Sie auf Schwachstellen stoßen, können Sie diese gerne über [email protected] einreichen.
Name | Link/Abzeichen |
---|---|
Dokumente | GoDoc |
Unser Jira | Jira |
Lizenzbericht | Bericht |
Änderungsprotokoll | Änderungsprotokoll |
Unterstützen Sie uns mit einer Spende oder werden Sie Sponsor | OpenCollective |
Unser Telegram-Chat | @gramework |
Unser #gramework-Kanal im Gophers Slack | https://gophers.slack.com |
Unser Discord-Server | https://discord.gg/HkW8DsD |
Abdeckung der Hauptfiliale | |
Status der Hauptfiliale | |
Abdeckung des Entwicklungszweigs | |
Entwicklungszweigstatus | |
CII-Best Practices | |
Gramework-Statistik-Dashboard für Grafana | https://grafana.com/dashboards/3422 |
Support-Kontakte | Per E-Mail: [email protected] |
Über die Telegram-Community: @gramework |
Dieses Projekt existiert dank unserer großartigen Mitwirkenden! [Beitragen].
Vielen Dank an alle unsere Unterstützer! [Unterstützer werden]
Unterstützen Sie dieses Projekt, indem Sie Sponsor werden. Hier erscheint Ihr Logo mit einem Link zu Ihrer Website. [Sponsor werden]
/third_party_licenses/fasthttp
und /third_party_licenses/fasthttprouter
.nettls_*.go
, ist eine integrierte Version von caddytls, da die Verwendung durch einen einfachen Import keine Option ist, da Gramework auf fasthttp
basiert, das mit net/http
nicht kompatibel ist. In dem Commit, auf dem ich basierte, ist Caddy Apache-2.0
lizenziert. Seine Lizenz wird in /third_party_licenses/caddy
abgelegt. @mholt erlaubt uns, den Code in diesem Repo zu kopieren. Das folgende Beispiel dient als „Hallo, Grameworld“. Gramework registriert das bind
-Flag für Sie, das es Ihnen ermöglicht, eine andere IP/einen anderen Port auszuwählen, auf dem Gramework lauschen soll:
package main
import (
"github.com/gramework/gramework"
)
func main () {
app := gramework . New ()
app . GET ( "/" , "hello, grameworld" )
app . ListenAndServe ()
}
Wenn Sie das bind
-Flag nicht unterstützen möchten, übergeben Sie das optionale Adressargument an ListenAndServe
.
HINWEIS : In allen folgenden Beispielen wird das bind
registriert.
Ab Version: 1.1.0-rc1
Im folgenden Beispiel wird {"hello":"grameworld"}
von der Karte aus bereitgestellt. Gramework registriert das bind
-Flag für Sie, das es Ihnen ermöglicht, eine andere IP/einen anderen Port auszuwählen, auf dem Gramework lauschen soll:
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 ()
}
Ab Version: 1.1.0-rc1
Das folgende Beispiel liefert {"hello":"grameworld"}
aus der Struktur. Gramework registriert das bind
-Flag für Sie, das es Ihnen ermöglicht, eine andere IP/einen anderen Port auszuwählen, auf dem Gramework lauschen soll:
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 ()
}
Im folgenden Beispiel werden statische Dateien aus ./files
bereitgestellt:
package main
import (
"github.com/gramework/gramework"
)
func main () {
app := gramework . New ()
app . GET ( "/*any" , app . ServeDir ( "./files" ))
app . ListenAndServe ()
}
Im folgenden Beispiel wird ein Byte-Slice bereitgestellt:
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
}
Dieses Beispiel zeigt, wie Sie von Fasthttp zu Gramework migrieren, ohne Ihre Handler neu zu schreiben.
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 ()
}