ランダマイザー作ってみた
〜Go製〜

当初はなかったけど、
なんとなく作ってしまったので、
ついでにソースをさらします。
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ってインデントつけてないことが多いですね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です