当初はなかったけど、
なんとなく作ってしまったので、
ついでにソースをさらします。
Web Application Frameworkはginです。
今回も3ファイルです。
まずはGoのソースファイルから。
package main
import (
crand "crypto/rand"
"fmt"
"github.com/gin-gonic/gin"
"math"
"math/big"
"math/rand"
"net/http"
)
func main() {
var ab [2]string
var result [10]string
ab[0] = "a"
ab[1] = "b"
router := gin.Default()
router.LoadHTMLGlob("*.tmpl")
router.GET("/go/rand/", func(c *gin.Context) {
seed, _ := crand.Int(crand.Reader, big.NewInt(math.MaxInt64))
rand.Seed(seed.Int64())
for i := 0; i < 10; i++ {
j := i + 1
k := fmt.Sprintf("%02d", j)
r := rand.Intn(2)
str := k + " : " + ab[r] + " "
result[i] = str
}
c.HTML(http.StatusOK, "index.tmpl", gin.H{
"contents": result,
})
})
router.NoRoute(func(c *gin.Context) {
c.HTML(http.StatusOK, "404.tmpl", nil)
})
router.Run(":5050")
}
最初、乱数の初期化からresultを組み立てる処理を、
router.GETより前に書いていたんですが、
そうするとリロードしても結果が変わらなかったので、
今の形になりました。
続いてindex.tmpl
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>
ランダマイザー
</title>
</head>
<body>
<center>
<span style="font-size: 5vh;">
{{range .contents}}
{{.}}<br />
{{end}}
<input type="button" value="もう1回" onclick="window.location.reload(true);" style="font-size: 3vh; WIDTH:25vw ; HEIGHT: 10vh"/>
</span>
</center>
</body>
</html>
HTMLの中に、 {{range .contents}}
{{.}}<br />
{{end}}
の3行が入っていてGoのソースから”contents”: result,で渡した結果を、
ループで処理してるのが特徴ですかね。
他の言語でやったみたいに、
テンプレート内にスクリプトを混ぜて書く方法を見つけられなかったので、
結果的にロジックとテンプレートが綺麗に別れてます。
最後におなじみの404です。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>
そのURLはコンテンツが存在しません。
</title>
</head>
<body>
<center>
<span style="font-size: 3vh;">
そのURLはコンテンツが存在しません。<br />
<a href="/">トップページに戻ってみてください。</a><br />
</span>
</center>
</body>
</html>
今見てみると404ってインデントつけてないことが多いですね。