กรอบการทำงานที่ดี
ภาพหน้าจอตัววัดการทดสอบระยะยาวของ Gramework ที่สร้างด้วย Gramework Stats Dashboard และมิดเดิลแวร์ตัววัด
Gramework เป็นเฟรมเวิร์กเว็บที่รวดเร็ว มีประสิทธิภาพสูง เชื่อถือได้ เน้น SPA เป็นหลัก สร้างขึ้นโดยผู้ดูแล fasthttp คุณได้รับ API ที่เรียบง่ายแต่ทรงพลัง ซึ่งเราจัดการการปรับให้เหมาะสมภายในองค์กร เรายินดีเสมอที่ได้เห็นคำขอคุณลักษณะและการประชาสัมพันธ์ของคุณ
เหตุผลในการใช้ Gramwork
Go >= 1.10.8 เป็นเวอร์ชันที่เก่าที่สุดที่ได้รับการทดสอบและรองรับอย่างต่อเนื่อง
หากคุณพบช่องโหว่ใด ๆ โปรดอย่าลังเลที่จะส่งข้อมูลเหล่านั้นผ่านทาง [email protected]
ชื่อ | ลิงค์/ตราสัญลักษณ์ |
---|---|
เอกสาร | โกด็อก |
จิราของเรา | จิรา |
รายงานใบอนุญาต | รายงาน |
บันทึกการเปลี่ยนแปลง | บันทึกการเปลี่ยนแปลง |
สนับสนุนเราด้วยการบริจาคหรือเป็นผู้สนับสนุน | OpenCollective |
การแชททางโทรเลขของเรา | @gramwork |
ช่อง #gramework ของเราใน Gophers Slack | https://gophers.slack.com |
เซิร์ฟเวอร์ Discord ของเรา | https://discord.gg/HkW8DsD |
ครอบคลุมสาขาหลัก | |
สถานะสาขาหลัก | |
ความครอบคลุมของสาขา Dev | |
สถานะสาขาที่กำลังพัฒนา | |
แนวทางปฏิบัติที่ดีที่สุดของ CII | |
แดชบอร์ดสถิติ Gramework สำหรับ Grafana | https://grafana.com/dashboards/3422 |
ติดต่อฝ่ายสนับสนุน | ทางอีเมล: [email protected] |
ผ่านทางชุมชน Telegram: @gramework |
โครงการนี้เกิดขึ้นได้เพราะผู้มีส่วนร่วมที่ยอดเยี่ยมของเรา! [มีส่วนช่วย].
ขอขอบคุณผู้สนับสนุนของเราทุกคน! [มาเป็นผู้สนับสนุน]
สนับสนุนโครงการนี้ด้วยการเป็นผู้สนับสนุน โลโก้ของคุณจะแสดงที่นี่พร้อมลิงก์ไปยังเว็บไซต์ของคุณ [มาเป็นสปอนเซอร์]
/third_party_licenses/fasthttp
และ /third_party_licenses/fasthttprouter
nettls_*.go
เป็นเวอร์ชันรวมของ caddytls เนื่องจากการใช้ผ่านการนำเข้าแบบง่ายไม่ใช่ตัวเลือก ดังนั้น gramework จะขึ้นอยู่กับ fasthttp
ซึ่งเข้ากันไม่ได้กับ net/http
ในคอมมิตที่ฉันยึดถือ แคดดี้ได้รับลิขสิทธิ์ Apache-2.0
ใบอนุญาตอยู่ใน /third_party_licenses/caddy
@mholt อนุญาตให้เราคัดลอกโค้ดใน repo นี้ ตัวอย่างด้านล่างนี้จะให้บริการ "สวัสดี Grameworld" Gramework จะลงทะเบียน bind
Flag ให้กับคุณ ซึ่งจะทำให้คุณสามารถเลือก IP/พอร์ตอื่นที่ Gramework ควรรับฟังได้:
package main
import (
"github.com/gramework/gramework"
)
func main () {
app := gramework . New ()
app . GET ( "/" , "hello, grameworld" )
app . ListenAndServe ()
}
หากคุณไม่ต้องการสนับสนุนการตั้งค่าสถานะ bind
ให้ส่งอาร์กิวเมนต์ที่อยู่เสริมไปที่ ListenAndServe
หมายเหตุ : ตัวอย่างทั้งหมดด้านล่างจะลงทะเบียนแฟล็ก bind
จากเวอร์ชัน: 1.1.0-rc1
ตัวอย่างด้านล่างจะให้บริการ {"hello":"grameworld"}
จากแผนที่ Gramework จะลงทะเบียน bind
Flag ให้กับคุณ ซึ่งจะทำให้คุณสามารถเลือก IP/พอร์ตอื่นที่ 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 ()
}
จากเวอร์ชัน: 1.1.0-rc1
ตัวอย่างด้านล่างจะให้บริการ {"hello":"grameworld"}
จากโครงสร้าง Gramework จะลงทะเบียน bind
Flag ให้กับคุณ ซึ่งจะทำให้คุณสามารถเลือก IP/พอร์ตอื่นที่ 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 ()
}
ตัวอย่างด้านล่างจะให้บริการไฟล์คงที่จาก ./files
:
package main
import (
"github.com/gramework/gramework"
)
func main () {
app := gramework . New ()
app . GET ( "/*any" , app . ServeDir ( "./files" ))
app . ListenAndServe ()
}
ตัวอย่างด้านล่างจะให้บริการชิ้นไบต์:
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
}
ตัวอย่างนี้สาธิตวิธีการย้ายจาก fasthttp ไปยัง gramework โดยไม่ต้องเขียนตัวจัดการใหม่
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 ()
}