프레임 "GIN"사용 시도(요청 매개 변수)

11742 단어 ginGo

매개변수 가져오기


다음 형식에서 파라미터를 얻다
http://localhost:8080/hello?name=Taro
http://localhost:8080/hello/Ziro
http://localhost:8080/api/hello?name=Saburo
http://localhost:8080/api/hello/Shiro

폴더 구성

.
├── main.go
├── asset
│   └── css
│       └── style.css
├── templates
│   ├── hello.html
│   └── layout.html
└── routes
    ├── routes.go
    └── api.go

MAIN


main.go
package main

import (
    "routes"
    "github.com/gin-gonic/gin"
)

func main() {
    router := gin.Default()

    // 事前にテンプレートをロード 相対パス
    // router.LoadHTMLGlob("templates/*/**") などもいけるらしい
    router.LoadHTMLGlob("templates/*.html")

    // 静的ファイルのパスを指定
    router.Static("/assets", "./assets")

    // ハンドラの指定
    router.GET("/hello", routes.Hello)
    router.GET("/hello/:name", routes.HelloParam)

    // グルーピング
    user := router.Group("/api")
    {
        user.GET("/hello", routes.HelloJson)
        user.GET("/hello/:name", routes.HelloJsonPram)
    }

    router.NoRoute(routes.NoRoute) // どのルーティングにも当てはまらなかった場合に処理
    router.Run(":8080")
}

처리 프로그램


routes/routes.go
package routes

import (
    "net/http"
    "github.com/gin-gonic/gin"
)

func Hello(c *gin.Context) {
    name := c.DefaultQuery("name", "HOGE") // HOGEはデフォルト値?
    //name := c.Query("lastname") // デフォルトがない場合
    c.HTML(http.StatusOK, "layout.html", gin.H{
        "name": name,
    })
}

func HelloParam(c *gin.Context) {
    name := c.Param("name")
    c.HTML(http.StatusOK, "layout.html", gin.H{
        "name": name,
    })
}

func NoRoute(c *gin.Context) {
    // helloに飛ばす
    c.Redirect(http.StatusMovedPermanently, "/hello")
}
routes/api.go
package routes

import (
    "github.com/gin-gonic/gin"
)

func HelloJson(c *gin.Context) {
    name := c.DefaultQuery("name", "HOGE") // HOGEはデフォルト値?
    //name := c.Query("lastname") // デフォルトがない場合
    c.JSON(200, gin.H{
        "name": name,
    })
}

func HelloJsonPram(c *gin.Context) {
    name := c.Param("name")
    c.JSON(200, gin.H{
        "name": name,
    })
}

템플릿 파일


templates/layouts.html
<html>
  <head>
    <link rel="stylesheet" href="assets/css/style.css">
    <title>Sample</title>
  </head>
  <body>
    <!-- Render the current template here -->
    {{template "content" .}}
  </body>
</html>
templates/hello.html
{{define "content"}}
<h2>Hello {{.name}}!</h2>
{{end}}

스타일 시트


assets/css/style.css
h2 {
    color: red;
}

실행 결과


http://localhost:8080/hello



기본 "HOGE"표시

http://localhost:8080/hello?name=Taro



http://localhost:8080/hello/Ziro



왠지 스타일시트가 안 어울려요.

http://localhost:8080/api/hello?name=Saburo



http://localhost:8080/api/hello/Shiro


좋은 웹페이지 즐겨찾기