Kerangka yang Baik
Tangkapan layar metrik stand pengujian jangka panjang Gramework dibuat dengan Gramework Stats Dashboard dan middleware metrik
Gramework adalah kerangka web serbaguna yang cepat, sangat efektif, andal, mengutamakan SPA, dan dibuat oleh pengelola fasthttp. Anda mendapatkan API yang sederhana namun kuat, kami menangani pengoptimalan secara internal. Kami selalu senang melihat permintaan fitur dan PR Anda.
Alasan menggunakan Gramework
Go >= 1.10.8 adalah versi terlama yang terus diuji dan didukung.
Jika Anda menemukan kerentanan apa pun, silakan kirimkan melalui [email protected].
Nama | Tautan/Lencana |
---|---|
dokumen | GoDok |
Jira kami | Jira |
Laporan Lisensi | Laporan |
log perubahan | log perubahan |
Dukung kami dengan donasi atau jadilah sponsor | Kolektif Terbuka |
Obrolan Telegram kami | @gramework |
Saluran #gramework kami di Gophers Slack | https://gophers.slack.com |
Server Perselisihan kami | https://discord.gg/HkW8DsD |
Cakupan cabang utama | |
Status cabang utama | |
Cakupan cabang pengembang | |
Status cabang pengembang | |
Praktik Terbaik CII | |
Dasbor Statistik Gramework untuk Grafana | https://grafana.com/dashboards/3422 |
Kontak dukungan | Melalui email: [email protected] |
Melalui komunitas Telegram: @gramework |
Proyek ini ada berkat kontributor kami yang luar biasa! [Menyumbang].
Terima kasih kepada semua pendukung kami! [Menjadi pendukung]
Dukung proyek ini dengan menjadi sponsor. Logo Anda akan muncul di sini dengan tautan ke situs web Anda. [Menjadi sponsor]
/third_party_licenses/fasthttp
dan /third_party_licenses/fasthttprouter
.nettls_*.go
, adalah versi caddytls yang terintegrasi, karena menggunakannya melalui impor sederhana bukanlah suatu pilihan, gramework didasarkan pada fasthttp
, yang tidak kompatibel dengan net/http
. Dalam komit yang saya dasarkan, caddy berlisensi Apache-2.0
. Lisensinya ditempatkan di /third_party_licenses/caddy
. @mholt izinkan kami menyalin kode di repo ini. Contoh di bawah ini adalah "halo, grameworld". Gramework akan mendaftarkan flag bind
untuk Anda, yang memungkinkan Anda memilih ip/port lain yang harus didengarkan oleh Gramework:
package main
import (
"github.com/gramework/gramework"
)
func main () {
app := gramework . New ()
app . GET ( "/" , "hello, grameworld" )
app . ListenAndServe ()
}
Jika Anda tidak ingin mendukung flag bind
, teruskan argumen alamat opsional ke ListenAndServe
.
CATATAN : semua contoh di bawah ini akan mendaftarkan flag bind
.
Dari versi: 1.1.0-rc1
Contoh di bawah ini akan menampilkan {"hello":"grameworld"}
dari peta. Gramework akan mendaftarkan flag bind
untuk Anda, yang memungkinkan Anda memilih ip/port lain yang harus didengarkan oleh Gramework:
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 ()
}
Dari versi: 1.1.0-rc1
Contoh di bawah ini akan menampilkan {"hello":"grameworld"}
dari struct. Gramework akan mendaftarkan flag bind
untuk Anda, yang memungkinkan Anda memilih ip/port lain yang harus didengarkan oleh Gramework:
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 ()
}
Contoh di bawah ini akan menyajikan file statis dari ./files
:
package main
import (
"github.com/gramework/gramework"
)
func main () {
app := gramework . New ()
app . GET ( "/*any" , app . ServeDir ( "./files" ))
app . ListenAndServe ()
}
Contoh di bawah ini akan menyajikan potongan byte:
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
}
Contoh ini menunjukkan cara bermigrasi dari fasthttp ke gramework tanpa menulis ulang penangan Anda.
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 ()
}