1
0
mirror of https://github.com/kataras/iris.git synced 2026-01-08 12:31:58 +00:00

Add notes for the new lead maintainer of the open-source iris project and align with @get-ion/ion by @hiveminded

Former-commit-id: da4f38eb9034daa49446df3ee529423b98f9b331
This commit is contained in:
kataras
2017-07-10 18:32:42 +03:00
parent 2d4c2779a7
commit 9f85b74fc9
344 changed files with 4842 additions and 5174 deletions

View File

@@ -0,0 +1,50 @@
package main
import (
"os"
"time"
"github.com/kataras/iris"
"github.com/kataras/iris/context"
)
// get a filename based on the date, file logs works that way the most times
// but these are just a sugar.
func todayFilename() string {
today := time.Now().Format("Jan 02 2006")
return today + ".txt"
}
func newLogFile() *os.File {
filename := todayFilename()
// open an output file, this will append to the today's file if server restarted.
f, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
panic(err)
}
return f
}
func main() {
f := newLogFile()
defer f.Close()
app := iris.New()
// attach the file as logger, remember, iris' app logger is just an io.Writer.
app.Logger().Out = newLogFile()
app.Get("/", func(ctx context.Context) {
// for the sake of simplicity, in order see the logs at the ./_today_.txt
ctx.Application().Logger().Infoln("Request path: " + ctx.Path())
ctx.Writef("hello")
})
// navigate to http://localhost:8080
// and open the ./logs.txt file
if err := app.Run(iris.Addr(":8080"), iris.WithoutBanner); err != nil {
if err != iris.ErrServerClosed {
app.Logger().Warnln("Shutdown with error: " + err.Error())
}
}
}

View File

@@ -0,0 +1 @@
hi = γεια, %s

View File

@@ -0,0 +1 @@
hi = hello, %s

View File

@@ -0,0 +1 @@
hi = 您好,%s

View File

@@ -0,0 +1,55 @@
package main
import (
"github.com/kataras/iris"
"github.com/kataras/iris/context"
"github.com/kataras/iris/middleware/i18n"
)
func newApp() *iris.Application {
app := iris.New()
app.Use(i18n.New(i18n.Config{
Default: "en-US",
URLParameter: "lang",
Languages: map[string]string{
"en-US": "./locales/locale_en-US.ini",
"el-GR": "./locales/locale_el-GR.ini",
"zh-CN": "./locales/locale_zh-CN.ini"}}))
app.Get("/", func(ctx context.Context) {
// it tries to find the language by:
// ctx.Values().GetString("language")
// if that was empty then
// it tries to find from the URLParameter setted on the configuration
// if not found then
// it tries to find the language by the "language" cookie
// if didn't found then it it set to the Default setted on the configuration
// hi is the key, 'iris' is the %s on the .ini file
// the second parameter is optional
// hi := ctx.Translate("hi", "iris")
// or:
hi := i18n.Translate(ctx, "hi", "iris")
language := ctx.Values().GetString(ctx.Application().ConfigurationReadOnly().GetTranslateLanguageContextKey())
// return is form of 'en-US'
// The first succeed language found saved at the cookie with name ("language"),
// you can change that by changing the value of the: iris.TranslateLanguageContextKey
ctx.Writef("From the language %s translated output: %s", language, hi)
})
return app
}
func main() {
app := newApp()
// go to http://localhost:8080/?lang=el-GR
// or http://localhost:8080
// or http://localhost:8080/?lang=zh-CN
app.Run(iris.Addr(":8080"))
}

View File

@@ -0,0 +1,29 @@
package main
import (
"fmt"
"testing"
"github.com/kataras/iris/httptest"
)
func TestI18n(t *testing.T) {
app := newApp()
expectedf := "From the language %s translated output: %s"
var (
elgr = fmt.Sprintf(expectedf, "el-GR", "γεια, iris")
enus = fmt.Sprintf(expectedf, "en-US", "hello, iris")
zhcn = fmt.Sprintf(expectedf, "zh-CN", "您好iris")
)
e := httptest.New(t, app)
// default is en-US
e.GET("/").Expect().Status(httptest.StatusOK).Body().Equal(enus)
// default is en-US if lang query unable to be found
e.GET("/").WithQueryString("lang=un-EX").Expect().Status(httptest.StatusOK).Body().Equal(enus)
e.GET("/").WithQueryString("lang=el-GR").Expect().Status(httptest.StatusOK).Body().Equal(elgr)
e.GET("/").WithQueryString("lang=en-US").Expect().Status(httptest.StatusOK).Body().Equal(enus)
e.GET("/").WithQueryString("lang=zh-CN").Expect().Status(httptest.StatusOK).Body().Equal(zhcn)
}

View File

@@ -0,0 +1,20 @@
package main
import (
"github.com/kataras/iris"
"github.com/kataras/iris/context"
"github.com/kataras/iris/middleware/pprof"
)
func main() {
app := iris.New()
app.Get("/", func(ctx context.Context) {
ctx.HTML("<h1> Please click <a href='/debug/pprof'>here</a>")
})
app.Any("/debug/pprof/{action:path}", pprof.New())
// ___________
app.Run(iris.Addr(":8080"))
}

View File

@@ -0,0 +1,30 @@
package main
import (
"github.com/kataras/iris"
"github.com/kataras/iris/context"
"github.com/kataras/iris/middleware/recover"
)
func main() {
app := iris.New()
// use this recover(y) middleware
app.Use(recover.New())
i := 0
// let's simmilate a panic every next request
app.Get("/", func(ctx context.Context) {
i++
if i%2 == 0 {
panic("a panic here")
}
ctx.Writef("Hello, refresh one time more to get panic!")
})
// http://localhost:8080, refresh it 5-6 times.
app.Run(iris.Addr(":8080"))
}
// Note:
// app := iris.Default() instead of iris.New() makes use of the recovery middleware automatically.