1
0
mirror of https://github.com/kataras/iris.git synced 2026-07-31 00:19:50 +00:00
Files
kararas_iris/README_ZH_HANT.md
T
2026-07-27 11:40:16 +03:00

99 KiB
Raw Blame History

新聞

🚀 Iris v14 即將登場。 下一個主要版本是本專案史上規模最大的一次發行:以 Go 泛型重建的框架、由編譯器把關的應用程式建構器、替你完成驗證的請求輔助函式、單一的錯誤對應表、三十個內建中介軟體,以及一本隨儲存庫一起發行的書。詳情請見下方的 Iris v14 帶來什麼

這裡介紹的 v12 仍然可用,也仍持續收到修正。v14 會走新的 import 路徑,所以它發行的那天,你這邊不會有任何東西壞掉。

Iris Web 框架 English العربية

組建狀態 查看範例 聊天室 捐助

Iris 是款不僅迅速、簡捷,並且功能完善、高效率的 Go 語言 Web 框架。

它能為你的下一個網站或 API,立下漂亮、富有表達性,且易於使用的基礎。

🌟 看看其他人怎麼評價 Iris,也歡迎為這個開源專案點一顆 星星

Benchmarks: Jul 18, 2020 at 10:46am (UTC)

package main

import "github.com/kataras/iris/v12"

func main() {
  app := iris.New()
  app.Use(iris.Compression)

  app.Get("/", func(ctx iris.Context) {
    ctx.HTML("哈囉,<strong>%s</strong>", "世界")
  })

  app.Listen(":8080")
}

正如一位 Go 開發者曾說過的,Iris 面面俱到,這些年來始終屹立不搖

Iris 提供的部分功能:

  • HTTP/2(Push,甚至支援內嵌資料)
  • 中介軟體(Accesslog、Basicauth、CORS、gRPC、防機器人 hCaptcha、JWT、MethodOverride、ModRevision、Monitor、PPROF、Ratelimit、防機器人 reCaptcha、Recovery、RequestID、Rewrite
  • API 版本管理
  • Model-View-Controller
  • Websockets
  • gRPC
  • 自動 HTTPS
  • 內建 ngrok 支援,把應用程式送上網際網路最快的方式
  • 獨特的路由,支援以動態路徑作為參數,內建 :uuid、:string、:int 等標準型別,也能自訂
  • 壓縮
  • 樣板引擎(HTML、Django、Handlebars、Pug/Jade 等)
  • 打造自己的檔案伺服器,並架設自己的 WebDAV 伺服器
  • 快取
  • 在地化(i18n、sitemap
  • Sessions
  • 豐富的回應(HTML、Text、Markdown、XML、YAML、Binary、JSON、JSONP、Protocol Buffers、MessagePack、內容協商、串流、Server-Sent Events 等)
  • 回應壓縮(gzip、deflate、brotli、snappy、s2
  • 豐富的請求(綁定 URL Query、Headers、Form、Text、XML、YAML、Binary、JSON、驗證、Protocol Buffers、MessagePack 等)
  • 相依性注入(MVC、Handlers、API Routers
  • 測試套件
  • 還有最重要的一點……從第一天到現在,你都能得到快速的回覆與支援

🚀 Iris v14 帶來什麼

Iris v14 是本專案史上規模最大的一次發行。它把框架重建在 Go 泛型之上,也改變了一個應用程式的組裝方式:main 裡的接線更少、處理函式更短,而那些過去散落在每一條路由上的決定,現在只在一個地方做。

這些今天都不需要你分心。v12 繼續可用、繼續收到修正,而 v14 會帶著一份涵蓋每個更名與移除 API 的移轉指南一起到來。

整個應用程式寫在一條由編譯器把關的鏈上

iris.NewBuilder 用一個運算式把 CORS、壓縮、存取紀錄、健康檢查端點、錯誤對應表、你的服務與 API 群組串起來。步驟順序由編譯器強制,因此應用程式要嘛正確建構,要嘛根本編譯不過。

iris.NewBuilder().
    Prefix("/api").
    AllowOrigin("*").
    Compression(true).
    LogRequests(true).
    Health(true, "production", "kataras").
    Errors(errors.NewOptions().
        MapErrors(errors.NotFound, catalog.ErrNotFound)).
    Services(catalog.NewRepository, catalog.NewService).
    API("/products", api.NewProductsAPI).
    Build().
    Listen(":8080")

處理函式不再重複自己

解碼、驗證與錯誤輸出都離開了處理函式的本體。rest.ReadJSON[T] 會解碼請求,若你的型別實作了 Validate() error 就順手執行,並自己寫出 400。回應輔助函式寫出成功的狀態碼,或是你的中央對應表為該錯誤指定的回應。

func (api *ProductsAPI) create(ctx iris.Context) {
    input, ok := rest.ReadJSON[catalog.ProductInput](ctx)
    if !ok {
        return // 400 已寫出:JSON 格式錯誤,或 Validate 沒通過。
    }

    id, err := api.svc.Create(ctx, input)
    rest.Created(ctx, id, err) // 201,或集中對應後的錯誤。
}

rest.OKrest.NoContentrest.Countrest.Paginated 涵蓋了 API 回傳的其餘形態。

錯誤只宣告一次

新的 rest/errors 套件保存著從你的領域錯誤到 HTTP 回應的對應關係。用戶端拿到的是規範、機器可讀的內容。內部訊息留在內部。註冊一個 collector,每一次失敗都會從同一個地方進到你的記錄器或資料庫。錯誤可以輸出成 JSON,也可以輸出成畫面,端看用戶端要的是什麼。

相依性注入無所不在,不再只屬於 MVC

建構函式宣告自己需要什麼,容器負責提供:處理函式、API 群組、控制器都一樣。實作 Init(ctx context.Context) error 的服務會在 Build() 裡執行一次。可關閉的資源會在關機時關閉。hero 套件走入歷史,由 deprest 接手,用更少的程式碼做更多事。MVC 控制器建立在泛型之上。

套件都在你以為它該在的位置

sessionscachewebsocketi18nviewversioning 都成了中介軟體。mvc 搬到 controller 底下,和新的 fileserversitemapapigraph 控制器並列。apigraph 會把你的路由樹畫成可互動的 D3 圖。

框架內建三十個中介軟體,其中包含這些新成員:httpcost(每個請求的時間、記憶體與 CPU,可用於效能分析或計費)、bodylimitcompresscounterreferrergeolocationipaccessservertiming。樣板引擎的實作搬到了 iris-contrib/views

設定是一個部分字面值

iris.Configuration 與那些 With* 設定器由 iris.Options 取代。只寫你在意的欄位,其餘的從預設值來。Bind 會先從 SERVER_CONFIG 環境變數讀取 YAML,接著才從檔案讀取。

app := iris.New(iris.Options{Name: "myapp", LogLevel: "debug"})

名稱如實說明它在做什麼

讀取請求標頭與設定回應標頭,不再共用一個會悄悄改變意思的前綴:ctx.Header 讀請求,而 ctx.SetHeaderctx.ResponseHeader 作用在回應上。Party 現在叫 Routerctx.URLParam 現在是 ctx.Query().Get。每一處更名都連同替代寫法列在移轉指南裡,而且大多數只需要一次搜尋取代。

預設就是安全的

Session cookie 預設帶著 SecureSameSite=Lax。請求本體的大小限制會在所有讀取路徑上生效。重建的過程也順手解決了一批陳年問題,其中包括一個只記錄限制卻從未真正執行的流量限制器,以及一次可能把整個行程帶走的 Logout 呼叫。

可以從頭讀到尾的文件

v14 附上一本收錄在儲存庫裡的 23 章書、一份用單篇文件寫出附測試的 REST API 的入門教學、一份給 v12 應用程式的移轉指南,以及一個由原始碼生成、能回答程式碼庫問題的即時 AI wiki。

這對你的 v12 程式碼意味著什麼

import 路徑變成 github.com/kataras/iris/v14,因此 v12 與 v14 可以並存,發行當天不會有東西壞掉。什麼時候升級由你決定。移轉指南涵蓋 import 路徑、套件的搬移、每一個被移除的 API 及其替代品,以及行為上的變化,機械性的部分還附上可直接執行的指令。

目前還沒有公開的發行日期。追蹤 releases 或關注 @iris_framework,第一時間收到消息。

👑 贊助者

有了你們的幫助,我們能讓開源的 Web 開發對所有人都更好!

getsentry github lensesio thepunterbot h4rdc0m draFWM gf3 trading-peter AlbinoGeek basilarchia sumjoe simpleittools xiaozhuai Remydeme celsosz linxcoder jnelle TechMaster janwebdev altafino jakoubek alekperos day0ng hengestone thomasfr code-chimp CetinBasoz International Juanses SometimesMage ansrivas boreevyuri brentwilson camilbinas ekobayong lexrus li3p madhu72 mosorize se77en tstangenberg vincent-li DavidShaw sascha11110 clichi2002 derReineke Sirisap22 primadi agoncecelia chrisliang12 zyu hobysmith pluja antonio-pedrazzini clacroix njeff3 ixalender mubariz-ahmed Cesar th31nitiate stgrosshh Didainius DmarshalTU IwateKyle Little-YangYang Major2828 MatejLach amritpal042 andrefiorot boomhut cshum dtrifonov gadokrisztian geordee guanting112 iantuan ichenhe rodrigoghm icibiri jewe11er jfloresremar jingtianfeng kilarusravankumar leandrobraga lfbos lpintes macropas marcmmx mark2b miguel-devs mihado mmckeen75 narven odas0r olaf-lexemo pitexplore pr123 rsousacode sankethpb wixregiga GeorgeFourikis saz59 shadowfiga siriushaha skurtz97 srinivasganti syrm tuhao1020 BlackHole1 L-M-Sherlock claudemuller keymanye wahyuief xuyan2018 xvalen xytis ElNovi IpastorSan KKP4 Lernakow ernestocolombo francisstephan pixelheresy rcapraro soiestad spkarason thanasolykos ukitzmann DanielKirkwood colinf simonproctor FernandoLangOFC Firdavs9512 Flammable-Duck Gepetdo Hongjian0619 JoeD Jude-X Kartoffelbot KevinZhouRafael KrishManohar Laotanling Longf99999 Lyansun MihaiPopescu1985 TBNilles ajanicij aprinslo1 Mohammed8960 NA Neulhan kyoukhana spazzymoto victorgrey ArishSultan ehayun kukaki oshirokazuhide t6tg 15189573255 AGPDev AnatolyUA AwsIT NguyenPhuoc Oka00 PaddyFrenchman RainerGevers Ramblestsad SamuelNeves Scorpio69t Serissa4000 TianJIANG Ubun1 WangYajun39 XinYoungCN YukinaMochizuki a112121788 acdias aeonsthorn agent3bood ajb-neodynamics-io alessandromarotta algobot76 algoflows angelaahhu anhxuanpham annieruci antoniejiao artman328 b2cbd baoch254 bastengao beytullahakyuz bjoroen blackHoleNgc1277 bunnycodego carlos-enginner centratelemedia chrismalek civicwar cnzhangquan cuong48d damiensy danlanxiaohei dextercai dfaugusto dkzhang dloprodu donam-givita dph0899 dvitale ec0629 edwindna2 ekiyooka ekofedriyanto eli-yip eljefedelrodeodeljefe fenriz07 ffelipelimao frenchmajesty gastropulgite geGao123 globalflea gloudx gnosthi gogoswift goten002 guanzi008 hdezoscar93 hieungm hieunmg homerious hzxd inyellowbus iuliancarnaru iysaleh jackptoke jackysywk jeff2go jeremiahyan joelywz kamolcu kana99 edsongley katsubushiken kattaprasanth keeio keval6706 khasanovrs kkdaypenny knavels kohakuhubo korowiov kostasvk lafayetteDan lbsubash leki75 lemuelroberto liheyuan lingyingtan linuxluigi lipatti maikelcoke marek-kuticka marman-hp mattbowen maxgozou maxgozzz mitas mizzlespot mkell43 mnievesco mo3lyana motogo mtrense mukunhao mulyawansentosa nasoma ngseiyu nikharsaxena nronzel odelanno onlysumitg xPoppa yesudeep ymonk yonson2 yshengliao ytxmobile98 yusong-offx zhenggangpku zou8944 SergeShin - BelmonduS Diewald cty4ka martinjanda evan hazmi-e205 jtgoral ky2s lauweliam ozfive paulcockrell paulxu21 pesquive petros9282 phil535 pitt134 poscard qiepeipei qiuzhanghua rapita rbondi relaera remopavithran rfunix rhernandez-itemsoft rikoriswandha risallaw robivictor rubiagatra rubyangxg rxrw saleebm sbenimeli sebyno seun-otosho shobhitsinghal77 solohiroshi su1gen sukiejosh suresh16671 svirmi terjelafton thiennguyen93 unixedia vadgun valsorym vguhesan vpiduri vrocadev vuhoanglam walter-wang martinlindhe mdamschen letmestudy michaelsmanley Curtman SridarDhandapani madrigaltenor opusmagna ShahramMebashar b4zz4r bobmcallan fangli galois-tnp mblandr midhubalan netbaalzovf oliverjosefzimmer peacememories talebisinan valkuere lfaynman ArturWierzbicki aaxx crashCoder derekslenk dochoaj evillgenius75 gog200921 mauricedcastro mwiater sj671 statik supersherm5 thejones CSRaghunandan ndimorle rosales-stephanie shyyawn vcruzato wangbl11 wofka72 geoshan juanxme nguyentamvinhlong yoru74 xsokev oleang michalsz pomland-94 tejzpr theantichris tuxaanand raphael-brand willypuzzle dmcbane malcolm-white-dti HieuLsw carlosmoran092 yangxianglong

📖 學習 Iris

安裝

唯一的要求是 Go 程式語言

建立新專案

$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest # 或 @v12.2.11
在既有專案中安裝
$ cd myapp
$ go get github.com/kataras/iris/v12@latest

執行

$ go mod tidy -compat=1.23 # windows 請用 -compat="1.23"。
$ go run .

Iris 有完整而詳盡的 使用文件,讓你可以輕鬆上手這個框架。

想看更詳細的技術文件,可以前往我們的 godocs。至於可執行的程式碼,隨時可以造訪儲存庫的 ./_examples 子目錄。

用 Plexon AI 開發

Plexon AI 是 Hellenic Development 推出的跨平台 AI 程式設計助理,它內建了一個專屬的 Iris 技能(skill:一份由框架作者親自撰寫的 v14 開發指南,包含十九篇參考文件,涵蓋路由與巨集、context API、rest 輔助函式、錯誤處理、全部三十個中介軟體、內建控制器、認證 SDK、安全強化、資料持久化、快取、i18n、可觀測性、效能、測試、部署,以及從 v12 到 v14 的移轉。

安裝 Software Developer 人格(persona),Iris 技能就會一起進來,與它啟用的那批工程類 agent 並列。這樣助理寫出來的 Iris 程式碼,就是這個框架原本該有的用法,而不是靠訓練時瞄到的片段去猜。

你喜歡在旅行時閱讀嗎?

Book cover

follow author on twitter

follow Iris web framework on twitter

follow Iris web framework on facebook

你可以立刻索取 Iris 電子書(新版)的 PDF 版本與線上閱讀權限,並參與 Iris 的開發。

🙌 貢獻

我們很期待看到你對 Iris Web 框架的貢獻!想知道如何為 Iris 專案貢獻,請參閱 CONTRIBUTING.md

所有貢獻者名單

🛡 安全漏洞

如果你在 Iris 中發現安全漏洞,請寄送電子郵件至 iris-go@outlook.com。所有安全漏洞都會盡速處理。

📝 授權條款

本專案採用 BSD 3-clause 授權條款,與 Go 專案本身相同。

專案名稱「Iris」的靈感來自希臘神話。