좋은 프레임워크
Gramework 통계 대시보드 및 메트릭 미들웨어로 만든 Gramework 장기 테스트 스탠드 메트릭 스크린샷
Gramework는 fasthttp 관리자가 만든 빠르고 효과적이고 안정적인 SPA 우선 웹 프레임워크입니다. 간단하면서도 강력한 API를 얻을 수 있으며, 우리는 내부적으로 최적화를 처리합니다. 우리는 귀하의 기능 요청과 PR을 항상 기쁘게 생각합니다.
Gramework를 사용하는 이유
Go >= 1.10.8은 지속적으로 테스트되고 지원되는 가장 오래된 버전입니다.
취약점이 발견되면 [email protected]을 통해 언제든지 제출해 주세요.
이름 | 링크/배지 |
---|---|
문서 | GoDoc |
우리 지라 | 지라 |
라이센스 보고서 | 보고서 |
변경 내역 | 변경 내역 |
기부로 후원하거나 후원자가 되어 보세요 | 오픈콜렉티브 |
우리의 텔레그램 채팅 | @gramework |
Gophers Slack의 #gramework 채널 | https://gophers.slack.com |
우리의 디스코드 서버 | https://discord.gg/HkW8DsD |
마스터 브랜치 적용 범위 | |
마스터 브랜치 상태 | |
개발 지점 적용 범위 | |
개발 브랜치 상태 | |
CII 모범 사례 | |
Grafana용 Gramework 통계 대시보드 | https://grafana.com/dashboards/3422 |
지원 연락처 | 이메일: [email protected] |
텔레그램 커뮤니티를 통해: @gramework |
이 프로젝트는 훌륭한 기여자들 덕분에 존재합니다! [기여하다].
모든 후원자분들께 감사드립니다! [후원자가 되세요]
후원자가 되어 이 프로젝트를 지원하세요. 귀하의 로고가 귀하의 웹사이트 링크와 함께 여기에 표시됩니다. [후원자가 되세요]
/third_party_licenses/fasthttp
및 /third_party_licenses/fasthttprouter
에서 해당 라이센스를 찾을 수 있습니다.nettls_*.go
에 있는 세 번째 autoTLS 구현은 caddytls의 통합 버전입니다. 간단한 가져오기를 통해 사용하는 것은 옵션이 아니며 문법 작업은 net/http
와 호환되지 않는 fasthttp
기반으로 하기 때문입니다. 내가 기반으로 한 커밋에서 캐디는 Apache-2.0
라이센스를 받았습니다. 라이센스는 /third_party_licenses/caddy
에 있습니다. @mholt를 사용하면 이 저장소의 코드를 복사할 수 있습니다. 아래 예에서는 "hello, Gramworld"를 제공합니다. Gramework는 귀하를 대신하여 Gramework가 수신해야 하는 다른 IP/포트를 선택할 수 있도록 bind
플래그를 등록합니다.
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는 귀하를 대신하여 Gramework가 수신해야 하는 다른 IP/포트를 선택할 수 있도록 bind
플래그를 등록합니다.
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는 귀하를 대신하여 Gramework가 수신해야 하는 다른 IP/포트를 선택할 수 있도록 bind
플래그를 등록합니다.
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에서 문법 작업으로 마이그레이션하는 방법을 보여줍니다.
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 ()
}