Fiber는 GO를위한 가장 빠른 HTTP 엔진 인 FASTHTTP 위에 구축 된 명백한 영감을받은 웹 프레임 워크 입니다. 메모리 할당 및 성능을 염두에두고 빠른 개발을 위해 작업을 완화 하도록 설계되었습니다.
Fiber V3는 현재 베타 및 활성 개발 중입니다. 흥미 진진한 새로운 기능을 제공하지만 생산 사용에 안정적이지 않을 수 있습니다. 미션 크리티컬 애플리케이션을위한 최신 안정 릴리스 (V2.X)를 고수하는 것이 좋습니다. v3을 사용하기로 선택한 경우 잠재적 인 버그 및 변경 사항에 대비하십시오. 항상 공식 문서 및 릴리스 노트를 확인하고 업데이트를 확인하고주의를 기울이십시오. 행복한 코딩!
섬유는 실행하려면 GO 버전 1.23 이상이 필요합니다. 설치하거나 업그레이드 해야하는 경우 공식 GO 다운로드 페이지를 방문하십시오. 프로젝트 설정을 시작하려면 프로젝트를위한 새 디렉토리를 만들고이를 탐색하십시오. 그런 다음 터미널에서 다음 명령을 실행하여 GO 모듈로 프로젝트를 초기화하십시오.
go mod init github.com/your/repoGO 모듈 및 작동 방식에 대한 자세한 내용은 GO Modules 사용 블로그 게시물을 확인할 수 있습니다.
프로젝트를 설정 한 후 go get 명령으로 파이버를 설치할 수 있습니다.
go get -u github.com/gofiber/fiber/v3이 명령은 파이버 패키지를 가져와 프로젝트의 종속성에 추가하여 섬유로 웹 애플리케이션을 구축 할 수 있습니다.
섬유를 시작하는 것은 쉽습니다. 다음은 "Hello, World!"로 응답하는 간단한 웹 서버를 만드는 기본 예입니다. 루트 경로에서. 이 예제에서는 새 파이버 앱 초기화, 경로 설정 및 서버 시작을 보여줍니다.
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
func main () {
// Initialize a new Fiber app
app := fiber . New ()
// Define a route for the GET method on the root path '/'
app . Get ( "/" , func ( c fiber. Ctx ) error {
// Send a string response to the client
return c . SendString ( "Hello, World !" )
})
// Start the server on port 3000
log . Fatal ( app . Listen ( ":3000" ))
} 이 간단한 서버는 쉽게 설정하고 실행할 수 있습니다. 섬유의 핵심 개념 : 앱 초기화, 경로 정의 및 서버 시작을 소개합니다. 이 GO 프로그램을 실행하고 브라우저에서 http://localhost:3000 방문하여 메시지를보십시오.
섬유는 고성능 에 최적화되어 있으며, 즉 Fiber.ctx 에서 반환 된 값은 기본적으로 불변이 아니며 요청에 따라 재사용 됩니다 . 일반적으로 핸들러 내에서만 컨텍스트 값을 사용해야 하며 참조를 유지해서는 안됩니다 . 핸들러에서 돌아 오면 컨텍스트에서 얻은 값은 향후 요청에서 재사용됩니다. 자세한 내용은 문서를 방문하십시오.
이 테스트는 TechEmpower 및 Go Web에서 수행합니다. 모든 결과를보고 싶다면 Wiki를 방문하십시오.
Node.js에서 Go로 전환하는 새로운 Gophers는 웹 응용 프로그램이나 마이크로 서비스를 구축하기 전에 학습 곡선을 다루고 있습니다. 웹 프레임 워크 인 Fiber는 미니멀리즘 의 아이디어로 만들어졌으며 유닉스 방식을 따라 새로운 고퍼가 따뜻하고 신뢰할 수있는 환영으로 갈 세계에 빠르게 들어갈 수 있습니다.
Fiber는 인터넷에서 가장 인기있는 웹 프레임 워크 인 Express에서 영감을 얻었습니다 . 우리는 GO의 Express 및 원시 성능 의 용이성을 결합했습니다. Node.js ( Express 또는 이와 유사한 사용 )에서 웹 응용 프로그램을 구현 한 경우 많은 방법과 원칙이 매우 공통적 으로 보일 것입니다.
우리는 문제, Discord 채널 및 인터넷 전역 에서 사용자의 말을 듣고 모든 작업, 마감일 및 개발자 기술을 위한 빠르고 유연하며 친근한 GO 웹 프레임 워크를 만듭니다! Express가 JavaScript 세계에서하는 것처럼.
아래에 나열된 몇 가지 일반적인 예가 있습니다. 더 많은 코드 예제를 보려면 레시피 저장소를 방문하거나 호스팅 된 API 문서를 방문하십시오.
package main
import (
"fmt"
"log"
"github.com/gofiber/fiber/v3"
)
func main () {
app := fiber . New ()
// GET /api/register
app . Get ( "/api/*" , func ( c fiber. Ctx ) error {
msg := fmt . Sprintf ( " %s" , c . Params ( "*" ))
return c . SendString ( msg ) // => register
})
// GET /flights/LAX-SFO
app . Get ( "/flights/:from-:to" , func ( c fiber. Ctx ) error {
msg := fmt . Sprintf ( "? From: %s, To: %s" , c . Params ( "from" ), c . Params ( "to" ))
return c . SendString ( msg ) // => ? From: LAX, To: SFO
})
// GET /dictionary.txt
app . Get ( "/:file.:ext" , func ( c fiber. Ctx ) error {
msg := fmt . Sprintf ( "? %s.%s" , c . Params ( "file" ), c . Params ( "ext" ))
return c . SendString ( msg ) // => ? dictionary.txt
})
// GET /john/75
app . Get ( "/:name/:age/:gender?" , func ( c fiber. Ctx ) error {
msg := fmt . Sprintf ( "? %s is %s years old" , c . Params ( "name" ), c . Params ( "age" ))
return c . SendString ( msg ) // => ? john is 75 years old
})
// GET /john
app . Get ( "/:name" , func ( c fiber. Ctx ) error {
msg := fmt . Sprintf ( "Hello, %s !" , c . Params ( "name" ))
return c . SendString ( msg ) // => Hello john !
})
log . Fatal ( app . Listen ( ":3000" ))
} package main
import (
"encoding/json"
"fmt"
"log"
"github.com/gofiber/fiber/v3"
)
func main () {
app := fiber . New ()
app . Get ( "/api/*" , func ( c fiber. Ctx ) error {
msg := fmt . Sprintf ( " %s" , c . Params ( "*" ))
return c . SendString ( msg ) // => register
}). Name ( "api" )
route := app . GetRoute ( "api" )
data , _ := json . MarshalIndent ( route , "" , " " )
fmt . Println ( string ( data ))
// Prints:
// {
// "method": "GET",
// "name": "api",
// "path": "/api/*",
// "params": [
// "*1"
// ]
// }
log . Fatal ( app . Listen ( ":3000" ))
} package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/static"
)
func main () {
app := fiber . New ()
// Serve static files from the "./public" directory
app . Get ( "/*" , static . New ( "./public" ))
// => http://localhost:3000/js/script.js
// => http://localhost:3000/css/style.css
app . Get ( "/prefix*" , static . New ( "./public" ))
// => http://localhost:3000/prefix/js/script.js
// => http://localhost:3000/prefix/css/style.css
// Serve a single file for any unmatched routes
app . Get ( "*" , static . New ( "./public/index.html" ))
// => http://localhost:3000/any/path/shows/index.html
log . Fatal ( app . Listen ( ":3000" ))
} package main
import (
"fmt"
"log"
"github.com/gofiber/fiber/v3"
)
func main () {
app := fiber . New ()
// Middleware that matches any route
app . Use ( func ( c fiber. Ctx ) error {
fmt . Println ( "? First handler" )
return c . Next ()
})
// Middleware that matches all routes starting with /api
app . Use ( "/api" , func ( c fiber. Ctx ) error {
fmt . Println ( "? Second handler" )
return c . Next ()
})
// GET /api/list
app . Get ( "/api/list" , func ( c fiber. Ctx ) error {
fmt . Println ( "? Last handler" )
return c . SendString ( "Hello, World !" )
})
log . Fatal ( app . Listen ( ":3000" ))
}구성 엔진 렌더링
뷰 엔진이 설정되지 않은 경우 광섬유 기본값은 HTML/템플릿으로 기본적으로 기본값을 제공합니다.
부분을 실행하거나 앰버, 핸들 바, 콧수염 또는 퍼그 등과 같은 다른 엔진을 사용하려면 다중 뷰 엔진을 지원하는 템플릿 패키지를 확인하십시오.
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/template/pug"
)
func main () {
// Initialize a new Fiber app with Pug template engine
app := fiber . New (fiber. Config {
Views : pug . New ( "./views" , ".pug" ),
})
// Define a route that renders the "home.pug" template
app . Get ( "/" , func ( c fiber. Ctx ) error {
return c . Render ( "home" , fiber. Map {
"title" : "Homepage" ,
"year" : 1999 ,
})
})
log . Fatal ( app . Listen ( ":3000" ))
}그룹
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
func middleware ( c fiber. Ctx ) error {
log . Println ( "Middleware executed" )
return c . Next ()
}
func handler ( c fiber. Ctx ) error {
return c . SendString ( "Handler response" )
}
func main () {
app := fiber . New ()
// Root API group with middleware
api := app . Group ( "/api" , middleware ) // /api
// API v1 routes
v1 := api . Group ( "/v1" , middleware ) // /api/v1
v1 . Get ( "/list" , handler ) // /api/v1/list
v1 . Get ( "/user" , handler ) // /api/v1/user
// API v2 routes
v2 := api . Group ( "/v2" , middleware ) // /api/v2
v2 . Get ( "/list" , handler ) // /api/v2/list
v2 . Get ( "/user" , handler ) // /api/v2/user
log . Fatal ( app . Listen ( ":3000" ))
}나무꾼
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/logger"
)
func main () {
app := fiber . New ()
// Use Logger middleware
app . Use ( logger . New ())
// Define routes
app . Get ( "/" , func ( c fiber. Ctx ) error {
return c . SendString ( "Hello, Logger!" )
})
log . Fatal ( app . Listen ( ":3000" ))
}코스
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/cors"
)
func main () {
app := fiber . New ()
// Use CORS middleware with default settings
app . Use ( cors . New ())
// Define routes
app . Get ( "/" , func ( c fiber. Ctx ) error {
return c . SendString ( "CORS enabled!" )
})
log . Fatal ( app . Listen ( ":3000" ))
} Origin 헤더에서 도메인을 전달하여 CORS를 확인하십시오.
curl -H " Origin: http://example.com " --verbose http://localhost:3000HTTP 방법
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
func main () {
app := fiber . New ()
// Define routes
app . Get ( "/" , static . New ( "./public" ))
app . Get ( "/demo" , func ( c fiber. Ctx ) error {
return c . SendString ( "This is a demo page!" )
})
app . Post ( "/register" , func ( c fiber. Ctx ) error {
return c . SendString ( "Registration successful!" )
})
// Middleware to handle 404 Not Found
app . Use ( func ( c fiber. Ctx ) error {
return c . SendStatus ( fiber . StatusNotFound ) // => 404 "Not Found"
})
log . Fatal ( app . Listen ( ":3000" ))
}JSON
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main () {
app := fiber . New ()
// Route that returns a JSON object
app . Get ( "/user" , func ( c fiber. Ctx ) error {
return c . JSON ( & User { "John" , 20 })
// => {"name":"John", "age":20}
})
// Route that returns a JSON map
app . Get ( "/json" , func ( c fiber. Ctx ) error {
return c . JSON (fiber. Map {
"success" : true ,
"message" : "Hi John!" ,
})
// => {"success":true, "message":"Hi John!"}
})
log . Fatal ( app . Listen ( ":3000" ))
}WebSocket
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/websocket"
)
func main () {
app := fiber . New ()
// WebSocket route
app . Get ( "/ws" , websocket . New ( func ( c * websocket. Conn ) {
defer c . Close ()
for {
// Read message from client
mt , msg , err := c . ReadMessage ()
if err != nil {
log . Println ( "read:" , err )
break
}
log . Printf ( "recv: %s" , msg )
// Write message back to client
err = c . WriteMessage ( mt , msg )
if err != nil {
log . Println ( "write:" , err )
break
}
}
}))
log . Fatal ( app . Listen ( ":3000" ))
// Connect via WebSocket at ws://localhost:3000/ws
}더 많은 정보
package main
import (
"bufio"
"fmt"
"log"
"time"
"github.com/gofiber/fiber/v3"
"github.com/valyala/fasthttp"
)
func main () {
app := fiber . New ()
// Server-Sent Events route
app . Get ( "/sse" , func ( c fiber. Ctx ) error {
c . Set ( "Content-Type" , "text/event-stream" )
c . Set ( "Cache-Control" , "no-cache" )
c . Set ( "Connection" , "keep-alive" )
c . Set ( "Transfer-Encoding" , "chunked" )
c . Context (). SetBodyStreamWriter ( func ( w * bufio. Writer ) {
var i int
for {
i ++
msg := fmt . Sprintf ( "%d - the time is %v" , i , time . Now ())
fmt . Fprintf ( w , "data: Message: %s n n " , msg )
fmt . Println ( msg )
w . Flush ()
time . Sleep ( 5 * time . Second )
}
})
return nil
})
log . Fatal ( app . Listen ( ":3000" ))
}다시 덮다
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/recover"
)
func main () {
app := fiber . New ()
// Use Recover middleware to handle panics gracefully
app . Use ( recover . New ())
// Route that intentionally panics
app . Get ( "/" , func ( c fiber. Ctx ) error {
panic ( "normally this would crash your app" )
})
log . Fatal ( app . Listen ( ":3000" ))
}구성
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
func main () {
app := fiber . New (fiber. Config {
// Configure trusted proxies - WARNING: Only trust proxies you control
// Using TrustProxy: true with unrestricted IPs can lead to IP spoofing
TrustProxy : true ,
TrustProxyConfig : fiber. TrustProxyConfig {
Proxies : [] string { "10.0.0.0/8" , "172.16.0.0/12" }, // Example: Internal network ranges only
},
ProxyHeader : fiber . HeaderXForwardedFor ,
})
// Define routes
app . Get ( "/" , func ( c fiber. Ctx ) error {
return c . SendString ( "Trusted Proxy Configured!" )
})
log . Fatal ( app . Listen ( ":3000" ))
}다음은 섬유 프레임 워크에 포함 된 미들웨어 목록입니다.
| 미들웨어 | 설명 |
|---|---|
| 어댑터 | Fiber 요청 처리기에서/HTTP 핸들러에 대한 컨버터. |
| BASICAUTH | HTTP 기본 인증을 제공합니다. 유효한 자격 증명에 대해서는 다음 핸들러를 호출하고 누락되거나 잘못된 자격 증명에 대해 무단으로 401입니다. |
| 은닉처 | HTTP 응답을 가로 채고 캐시합니다. |
| 압박 붕대 | deflate , gzip , brotli 및 zstd 를 지원하는 섬유 용 압축 미들웨어. |
| 코스 | 다양한 옵션으로 CORS (Cross-Origin Resource Sharing)를 활성화하십시오. |
| CSRF | CSRF 익스플로잇으로부터 보호하십시오. |
| EarlyData | TLS 1.3의 초기 데이터 ( "0-RTT") 기능에 대한 지원을 추가합니다. |
| 암호화 | 쿠키 값을 암호화하는 미들웨어를 암호화합니다. |
| Envvar | 선택적 구성을 제공하여 환경 변수를 노출시킵니다. |
| 에타그 | 콘텐츠가 변경되지 않은 경우 웹 서버가 전체 응답을 재현 할 필요가 없으므로 캐시를보다 효율적으로 만들고 대역폭을 저장할 수 있습니다. |
| Expvar | JSON 형식의 HTTP 서버 런타임 노출 변수를 통해 제공됩니다. |
| 파비콘 | 파일 경로가 제공되는 경우 로그에서 favicon을 무시하거나 메모리에서 서빙하십시오. |
| 건강 검사 | 섬유에 대한 친화 및 준비 프로브. |
| 헬멧 | 다양한 HTTP 헤더를 설정하여 앱을 보호하는 데 도움이됩니다. |
| Idempotency | 중복 요청이 서버 측에서 여러 번 동일한 작업을 수행하는 동일한 작업을 잘못 유발하지 않는 결함 방해 API를 허용합니다. |
| keyauth | 주요 기반 인증을 지원합니다. |
| 리미터 | 섬유에 속도 제한지지를 추가합니다. 반복 된 요청을 공개 API 및/또는 암호 재설정과 같은 엔드 포인트로 제한하는 데 사용하십시오. |
| 나무꾼 | HTTP 요청/응답 로거. |
| PPROF | PPROF 형식의 런타임 프로파일 링 데이터를 제공합니다. |
| 대리 | 여러 서버에 요청을 프록시 할 수 있습니다. |
| 다시 덮다 | 스택 체인의 어느 곳에서나 패닉에서 복구하고 중앙 집중식 오류 핸들러로 컨트롤을 처리합니다. |
| 리디렉션 | 미들웨어 리디렉션. |
| requestId | 모든 요청에 요청 ID를 추가합니다. |
| 고쳐 쓰기 | 제공된 규칙에 따라 URL 경로를 다시 작성합니다. 뒤로 호환되거나 더 깨끗하고 설명적인 링크를 만드는 데 도움이 될 수 있습니다. |
| 세션 | 세션 미들웨어. 참고 :이 미들웨어는 저장소 패키지를 사용합니다. |
| 건너뛰다 | 술어가 사실이라면 포장 된 핸들러를 건너 뛰는 미들웨어를 건너 뜁니다. |
| 공전 | 이미지 , CSS 및 JavaScript 와 같은 정적 파일을 제공하는 섬유 용 정적 미들웨어. |
| 시간 초과 | 요청에 대한 최대 시간을 추가하고 초과하면 ErrorHandler로 전달됩니다. |
외부 호스팅 미들웨어 모듈 목록 및 섬유 팀이 유지 관리합니다.
| 미들웨어 | 설명 |
|---|---|
| 기여 | 타사 중간 전쟁 |
| 저장 | 다양한 섬유 중간 전쟁과 함께 사용되도록 설계된 스토리지 인터페이스를 구현하는 미리 메이드 스토리지 드라이버. |
| 주형 | 이 패키지에는 파이버 v3 과 함께 사용할 수있는 9 개의 템플릿 엔진이 포함되어 있습니다. GO 버전 1.23 이상이 필요합니다. |
더 많은 기사, 중간 및 예제 또는 도구는 멋진 목록을 확인하십시오.
당신이 말하고 싶다면 , 당신에게 감사하고 /하거나 Fiber 의 적극적인 개발을 지원합니다.
기부금이 풀 요청에 대한 준비가되도록하려면 다음 Makefile 명령을 사용하십시오. 이 도구는 코드 품질과 일관성을 유지하는 데 도움이됩니다.
코드가 프로젝트 표준 및 모범 사례를 준수하도록하기 위해이 명령을 실행하십시오.
Fiber는 기부금을 지불하는 오픈 소스 프로젝트입니다. 섬유를 지원하려면 여기에서 커피를 구입할 수 있습니다.
| 사용자 | 기부 | |
|---|---|---|
| @destari | x x 10 | |
| @dembygenesis | ☕ x 5 | |
| @thomasvvugt | ☕ x 5 | |
| @hendratommy | ☕ x 5 | |
| @ekaputra07 | ☕ x 5 | |
| @jorgefuertes | ☕ x 5 | |
| @candidosales | ☕ x 5 | |
| @l0nax | x x 3 | |
| @bihe | x x 3 | |
| @justdave | x x 3 | |
| @koddr | ☕ x 1 | |
| @lapolinar | ☕ x 1 | |
| @diegowifi | ☕ x 1 | |
| @ssimk0 | ☕ x 1 | |
| @raymayemir | ☕ x 1 | |
| @melkorm | ☕ x 1 | |
| @marvinjwendt | ☕ x 1 | |
| @toishy | ☕ x 1 |
저작권 (C) 2019- 제기 Fenny 및 기고자. Fiber MIT 라이센스에 따라 무료 및 오픈 소스 소프트웨어입니다. 공식 로고는 Vic Shóstak에 의해 만들어졌으며 Creative Commons 라이센스 (CC By-SA 4.0 International)에 따라 배포되었습니다.