質問編集履歴

1

エラーやコードを再度載せました

2016/05/22 02:29

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,11 +2,247 @@
2
2
 
3
3
  チュートリアル(golang.jp)を行っているのですが、TemplateFileの読み込みがうまくいきません。
4
4
 
5
+ ```Go
6
+
7
+ package main
8
+
9
+
10
+
11
+ import (
12
+
13
+ "net/http"
14
+
15
+ "io/ioutil"
16
+
17
+ "os"
18
+
19
+ "regexp"
20
+
21
+ "template"
22
+
23
+ )
24
+
25
+
26
+
27
+ type Page struct {
28
+
29
+ Title string
30
+
31
+ Body []byte
32
+
33
+ }
34
+
35
+
36
+
37
+ func (p *Page) save() os.Error {
38
+
39
+ filename := p.Title + ".txt"
40
+
41
+ return ioutil.WriteFile(filename, p.Body, 0600)
42
+
43
+ }
44
+
45
+
46
+
47
+ func loadPage(title string) (*Page, os.Error) {
48
+
49
+ filename := title + ".txt"
50
+
51
+ body, err := ioutil.ReadFile(filename)
52
+
53
+ if err != nil {
54
+
55
+ return nil, err
56
+
57
+ }
58
+
59
+ return &Page{Title: title, Body: body}, nil
60
+
61
+ }
62
+
63
+
64
+
65
+ func viewHandler(w http.ResponseWriter, r *http.Request, title string) {
66
+
67
+ p, err := loadPage(title)
68
+
69
+ if err != nil {
70
+
71
+ http.Redirect(w, r, "/edit/"+title, http.StatusFound)
72
+
73
+ return
74
+
75
+ }
76
+
77
+ renderTemplate(w, "view", p)
78
+
79
+ }
80
+
81
+
82
+
83
+ func editHandler(w http.ResponseWriter, r *http.Request, title string) {
84
+
85
+ p, err := loadPage(title)
86
+
87
+ if err != nil {
88
+
89
+ p = &Page{Title: title}
90
+
91
+ }
92
+
93
+ renderTemplate(w, "edit", p)
94
+
95
+ }
96
+
97
+
98
+
99
+ func saveHandler(w http.ResponseWriter, r *http.Request, title string) {
100
+
101
+ body := r.FormValue("body")
102
+
103
+ p := &Page{Title: title, Body: []byte(body)}
104
+
105
+ err := p.save()
106
+
107
+ if err != nil {
108
+
109
+ http.Error(w, err.String(), http.StatusInternalServerError)
110
+
111
+ return
112
+
113
+ }
114
+
115
+ http.Redirect(w, r, "/view/"+title, http.StatusFound)
116
+
117
+ }
118
+
119
+
120
+
121
+ var templates = make(map[string]*template.Template)
122
+
123
+
124
+
125
+ func init() {
126
+
127
+ for _, tmpl := range []string{"edit", "view"} {
128
+
129
+ templates[tmpl] = template.MustParseFile(tmpl+".html", nil)
130
+
131
+ }
132
+
133
+ }
134
+
135
+
136
+
137
+ func renderTemplate(w http.ResponseWriter, tmpl string, p *Page) {
138
+
139
+ err := templates[tmpl].Execute(w, p)
140
+
141
+ if err != nil {
142
+
143
+ http.Error(w, err.String(), http.StatusInternalServerError)
144
+
145
+ }
146
+
147
+ }
148
+
149
+
150
+
151
+ const lenPath = len("/view/")
152
+
153
+
154
+
155
+ var titleValidator = regexp.MustCompile("^[a-zA-Z0-9]+$")
156
+
157
+
158
+
159
+ func makeHandler(fn func(http.ResponseWriter, *http.Request, string)) http.HandlerFunc {
160
+
161
+ return func(w http.ResponseWriter, r *http.Request) {
162
+
163
+ title := r.URL.Path[lenPath:]
164
+
165
+ if !titleValidator.MatchString(title) {
166
+
167
+ http.NotFound(w, r)
168
+
169
+ return
170
+
171
+ }
172
+
173
+ fn(w, r, title)
174
+
175
+ }
176
+
177
+ }
178
+
179
+
180
+
181
+ func main() {
182
+
183
+ http.HandleFunc("/view/", makeHandler(viewHandler))
184
+
185
+ http.HandleFunc("/edit/", makeHandler(editHandler))
186
+
187
+ http.HandleFunc("/save/", makeHandler(saveHandler))
188
+
189
+ http.ListenAndServe(":8080", nil)
190
+
191
+ }
192
+
193
+ ```
194
+
195
+ ```edit.html
196
+
197
+ <h1>Editing {Title}</h1>
198
+
199
+
200
+
201
+ <form action="/save/{Title}" method="POST">
202
+
203
+ <div><textarea name="body" rows="20" cols="80">{Body|html}</textarea></div>
204
+
205
+ <div><input type="submit" value="Save"></div>
206
+
207
+ </form>
208
+
209
+ ```
210
+
211
+ ```view.html
212
+
213
+ <h1>{Title}</h1>
214
+
215
+
216
+
217
+ <p>[<a href="/edit/{Title}">edit</a>]</p>
218
+
219
+
220
+
221
+ <div>{Body}</div>
222
+
223
+ ```
224
+
225
+
226
+
227
+ まだできていないところがあるとは思いますが、htmlは表示されるのではないかと思っていたら、以下のようなことが出てきました。
228
+
229
+
230
+
5
231
  これは、フォルダの置き方が悪いのか、なんなのかよくわかりません。
6
232
 
233
+
234
+
7
- Errorはsrc~(from $GOROOT)と出ています。
235
+ cannot find package "template" in any of:
236
+
8
-
237
+ /usr/local/Cellar/go/1.6.2/libexec/src/template (from $GOROOT)
238
+
239
+ /Users/hn/tutorial/src/template (from $GOPATH)
240
+
241
+
242
+
9
- これはそのフォルダにGOROOTが通っていないということでしょうか。
243
+ これはそのフォルダにGOPATH.GOROOTが通っていないということでしょうか。
244
+
245
+ それともtemplate自体もう対応していないのでしょうか。
10
246
 
11
247
 
12
248
 
@@ -14,7 +250,7 @@
14
250
 
15
251
 
16
252
 
17
- プログラミング経験が少なくよくわかっていません。
253
+ プログラミング経験が少なくよくわかっていません。
18
254
 
19
255
 
20
256