Fix #406, #407 and gofmt all examples

This commit is contained in:
Javier Provecho Fernandez 2015-08-17 12:49:28 +02:00
parent dba1781814
commit 02df324cc6

137
README.md
View File

@ -12,7 +12,7 @@ Gin is a web framework written in Golang. It features a martini-like API with mu
![Gin console logger](https://gin-gonic.github.io/gin/other/console.png) ![Gin console logger](https://gin-gonic.github.io/gin/other/console.png)
``` ```sh
$ cat test.go $ cat test.go
``` ```
```go ```go
@ -84,7 +84,7 @@ BenchmarkZeus_GithubAll | 2000 | 944234 | 300688 | 2648
1. Download and install it: 1. Download and install it:
```sh ```sh
go get github.com/gin-gonic/gin $ go get github.com/gin-gonic/gin
``` ```
2. Import it in your code: 2. Import it in your code:
@ -143,17 +143,17 @@ func main() {
#### Querystring parameters #### Querystring parameters
```go ```go
func main() { func main() {
router := gin.Default() router := gin.Default()
// Query string parameters are parsed using the existing underlying request object. // Query string parameters are parsed using the existing underlying request object.
// The request responds to a url matching: /welcome?firstname=Jane&lastname=Doe // The request responds to a url matching: /welcome?firstname=Jane&lastname=Doe
router.GET("/welcome", func(c *gin.Context) { router.GET("/welcome", func(c *gin.Context) {
firstname := c.DefaultQuery("firstname", "Guest") firstname := c.DefaultQuery("firstname", "Guest")
lastname := c.Query("lastname") // shortcut for c.Request.URL.Query().Get("lastname") lastname := c.Query("lastname") // shortcut for c.Request.URL.Query().Get("lastname")
c.String(http.StatusOK, "Hello %s %s", firstname, lastname) c.String(http.StatusOK, "Hello %s %s", firstname, lastname)
}) })
router.Run(":8080") router.Run(":8080")
} }
``` ```
@ -161,18 +161,19 @@ func main() {
```go ```go
func main() { func main() {
router := gin.Default() router := gin.Default()
router.POST("/form_post", func(c *gin.Context) { router.POST("/form_post", func(c *gin.Context) {
message := c.PostForm("message") message := c.PostForm("message")
nick := c.DefaultPostForm("nick", "anonymous") nick := c.DefaultPostForm("nick", "anonymous")
c.JSON(200, gin.H{ c.JSON(200, gin.H{
"status": "posted", "status": "posted",
"message": message, "message": message,
}) "nick": nick,
}) })
router.Run(":8080") })
router.Run(":8080")
} }
``` ```
@ -190,12 +191,12 @@ func main() {
router := gin.Default() router := gin.Default()
router.POST("/post", func(c *gin.Context) { router.POST("/post", func(c *gin.Context) {
id := c.Query("id") id := c.Query("id")
page := c.DefaultQuery("page", "0") page := c.DefaultQuery("page", "0")
name := c.PostForm("name") name := c.PostForm("name")
message := c.PostForm("message") message := c.PostForm("message")
fmt.Print("id: %s; page: %s; name: %s; message: %s", id, page, name, message) fmt.Printf("id: %s; page: %s; name: %s; message: %s", id, page, name, message)
}) })
router.Run(":8080") router.Run(":8080")
} }
@ -301,30 +302,30 @@ type Login struct {
func main() { func main() {
router := gin.Default() router := gin.Default()
// Example for binding JSON ({"user": "manu", "password": "123"}) // Example for binding JSON ({"user": "manu", "password": "123"})
router.POST("/loginJSON", func(c *gin.Context) { router.POST("/loginJSON", func(c *gin.Context) {
var json Login var json Login
if c.BindJSON(&json) == nil { if c.BindJSON(&json) == nil {
if json.User == "manu" && json.Password == "123" { if json.User == "manu" && json.Password == "123" {
c.JSON(http.StatusOK, gin.H{"status": "you are logged in"}) c.JSON(http.StatusOK, gin.H{"status": "you are logged in"})
} else { } else {
c.JSON(http.StatusUnauthorized, gin.H{"status": "unauthorized"}) c.JSON(http.StatusUnauthorized, gin.H{"status": "unauthorized"})
} }
} }
}) })
// Example for binding a HTML form (user=manu&password=123) // Example for binding a HTML form (user=manu&password=123)
router.POST("/loginForm", func(c *gin.Context) { router.POST("/loginForm", func(c *gin.Context) {
var form Login var form Login
// This will infer what binder to use depending on the content-type header. // This will infer what binder to use depending on the content-type header.
if c.Bind(&form) == nil { if c.Bind(&form) == nil {
if form.User == "manu" && form.Password == "123" { if form.User == "manu" && form.Password == "123" {
c.JSON(http.StatusOK, gin.H{"status": "you are logged in"}) c.JSON(http.StatusOK, gin.H{"status": "you are logged in"})
} else { } else {
c.JSON(http.StatusUnauthorized, gin.H{"status": "unauthorized"}) c.JSON(http.StatusUnauthorized, gin.H{"status": "unauthorized"})
} }
} }
}) })
// Listen and server on 0.0.0.0:8080 // Listen and server on 0.0.0.0:8080
router.Run(":8080") router.Run(":8080")
@ -353,21 +354,21 @@ func main() {
// c.BindWith(&form, binding.Form) // c.BindWith(&form, binding.Form)
// or you can simply use autobinding with Bind method: // or you can simply use autobinding with Bind method:
var form LoginForm var form LoginForm
// in this case proper binding will be automatically selected // in this case proper binding will be automatically selected
if c.Bind(&form) == nil { if c.Bind(&form) == nil {
if form.User == "user" && form.Password == "password" { if form.User == "user" && form.Password == "password" {
c.JSON(200, gin.H{"status": "you are logged in"}) c.JSON(200, gin.H{"status": "you are logged in"})
} else { } else {
c.JSON(401, gin.H{"status": "unauthorized"}) c.JSON(401, gin.H{"status": "unauthorized"})
} }
} }
}) })
router.Run(":8080") router.Run(":8080")
} }
``` ```
Test it with: Test it with:
```bash ```sh
$ curl -v --form user=user --form password=password http://localhost:8080/login $ curl -v --form user=user --form password=password http://localhost:8080/login
``` ```
@ -411,13 +412,13 @@ func main() {
```go ```go
func main() { func main() {
router := gin.Default() router := gin.Default()
router.Static("/assets", "./assets") router.Static("/assets", "./assets")
router.StaticFS("/more_static", http.Dir("my_file_system")) router.StaticFS("/more_static", http.Dir("my_file_system"))
router.StaticFile("/favicon.ico", "./resources/favicon.ico") router.StaticFile("/favicon.ico", "./resources/favicon.ico")
// Listen and server on 0.0.0.0:8080 // Listen and server on 0.0.0.0:8080
router.Run(":8080") router.Run(":8080")
} }
``` ```
@ -439,9 +440,10 @@ func main() {
} }
``` ```
```html ```html
<html><h1> <html>
{{ .title }} <h1>
</h1> {{ .title }}
</h1>
</html> </html>
``` ```
@ -559,17 +561,16 @@ func main() {
r.GET("/long_async", func(c *gin.Context) { r.GET("/long_async", func(c *gin.Context) {
// create copy to be used inside the goroutine // create copy to be used inside the goroutine
c_cp := c.Copy() cCp := c.Copy()
go func() { go func() {
// simulate a long task with time.Sleep(). 5 seconds // simulate a long task with time.Sleep(). 5 seconds
time.Sleep(5 * time.Second) time.Sleep(5 * time.Second)
// note than you are using the copied context "c_cp", IMPORTANT // note than you are using the copied context "c_cp", IMPORTANT
log.Println("Done! in path " + c_cp.Request.URL.Path) log.Println("Done! in path " + cCp.Request.URL.Path)
}() }()
}) })
r.GET("/long_sync", func(c *gin.Context) { r.GET("/long_sync", func(c *gin.Context) {
// simulate a long task with time.Sleep(). 5 seconds // simulate a long task with time.Sleep(). 5 seconds
time.Sleep(5 * time.Second) time.Sleep(5 * time.Second)
@ -578,8 +579,8 @@ func main() {
log.Println("Done! in path " + c.Request.URL.Path) log.Println("Done! in path " + c.Request.URL.Path)
}) })
// Listen and server on 0.0.0.0:8080 // Listen and server on 0.0.0.0:8080
r.Run(":8080") r.Run(":8080")
} }
``` ```