Go
golang

WEBアプリの作成(個人的な備忘)


ディレクトリ構成


一般的なディレクトリ構成

RailsなどのMVCフレームワークは以下のような構成になっています。


app配下

app/

├ assets/
├ controllers/
│ ├ users
│ └ members
├ views/
│ ├ users/
│ │ ├ index
│ │ └ edit
│ └ members/
│ ├ index
│ └ edit
└ models/
├ user
└ member


個人的に好きなディレクトリ構成

しかし、仕事の場合、機能単位で依頼する場合が多く

以下のような構成が個人的には好みです。


app配下

app/

├ user/ 機能ごとにフォルダが分かれている。
│ ├ controller
│ ├ views/
│ │ ├ index
│ │ └ edit
| └ model
└ member/
 ├ controller
├ views/
│ ├ index
│ └ edit
└ model


今回の作成するアプリの構成

最近、Go言語の勉強を始めたので、備忘を兼ねて個人的な記録して掲載しています。

今回の構成は、以下の通りです。

Userなどを使わず、M001 などを使っているのは、自分がSIer勤務で機能IDを

テーブルやソースファイルに付加する方が馴染み深いためです。


app配下

app/

├ main.go
├ static/
│ └ css/
│ └ common.css
├ M001/
│ ├ handler.go
│ └ view/
│ └ index.html
└ Templates/
├ Application.html
└ Footer.html


今回のソース

以下のmain.goの書き方だと、M001などの機能が増えるたびにimportを記述する必要があります。

main.goは修正せずにデータベースなどから機能IDなどを取得して、機能追加できるようにしたいです。(今は方法がわかりません。)


main.go

package main

import (
"log"
"net/http"
"M001"
)

func main() {
//staticファイル読みこみ
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static/")))) // これがないとダメ

// M001
http.HandleFunc("/M001/", M001.Handler)

log.Fatal(http.ListenAndServe(":8080", nil))
}



M001/handler.go

package M001

import (
"html/template"
"net/http"
)

type Person struct {
Name string
From string
}

func Handler(w http.ResponseWriter, r *http.Request) {

p := Person{
Name:"佐藤",
From :"埼玉",
}

tmpl := template.Must(template.ParseFiles("Templates/Application.html", "Templates/Footer.html", "M001/view/index.html"))
tmpl.Execute(w, p)
}



M001/view/index.html

{{define "content"}}

<p>名前:{{.Name}}</p>
<p>出身:{{.From}}</p>
{{end}}


Templates/Application.html

<!DOCTYPE html>

<html lang="ja">

<head>
<meta charset="UTF-8">
<title>テスト</title>
<link rel="stylesheet" type="text/css" href="../static/css/common.css">
</head>

<body>
ヘッダー情報<br>
{{template "content" .}}
変数を使わない場合 .(dot)はいらない<br>
{{template "copyright"}}
</body>
</html>



Templates/Footer.html

{{define "copyright"}}

Copyright 2019 xxxxxx All Rights Reserved.
{{end}}


static/css/common.css

p {

color:blue;
}