質問編集履歴

3

追記で質問をさせていただきました。

2017/09/13 12:06

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -221,3 +221,155 @@
221
221
 
222
222
 
223
223
  質問攻めすみません。
224
+
225
+
226
+
227
+ #追記2
228
+
229
+ とりあえず、gormを使ってDBにレコードを作ることはできるようになりました。
230
+
231
+ あとややこしく考えていましたが、GORMは、単純にGo言語でsqlを楽に扱うためのライブラリってことに気がついて気が楽になりました。
232
+
233
+
234
+
235
+ レコード作成はこうですね!↓(質問ではないので軽く見流していただければ結構です 汗)
236
+
237
+ ```go
238
+
239
+ type UserData struct {
240
+
241
+ gorm.Model //ここにCreatedAtがあるのでタイムスタンプは任せればいいですね。
242
+
243
+ Userid string
244
+
245
+ Password string
246
+
247
+ }
248
+
249
+
250
+
251
+ func main() {
252
+
253
+ saveUserData("DDxlk", "DDxlkDayo")
254
+
255
+ }
256
+
257
+
258
+
259
+ func SaveUserData(userid, password string) {
260
+
261
+ db, err := gorm.Open("sqlite3", "test.sqlite3")
262
+
263
+ if err != nil {
264
+
265
+ panic("failed to connect database")
266
+
267
+ }
268
+
269
+ defer db.Close()
270
+
271
+ // Migrate the schema
272
+
273
+ db.AutoMigrate(&UserData{})
274
+
275
+ // Create
276
+
277
+ user := &UserData{Userid: userid, Password: password}
278
+
279
+ db.Create(&user)
280
+
281
+ }
282
+
283
+ ```
284
+
285
+
286
+
287
+ ###質問1
288
+
289
+ useridとpasswordをhtmlのフォームからechoに送ってdbに登録するわけですが、dbに何も書き込まれません(レコードのuseridとpasswordの部分が空白になってしまいます)
290
+
291
+ registration.html(登録)のフォームの部分が以下です
292
+
293
+ ```html
294
+
295
+ <form action="/api/register" method="post" name="registration_form">
296
+
297
+ <input type="text" name="userid" id="userid_form"/>
298
+
299
+ <input type="password" name="password" id="password_form"/>
300
+
301
+ <input type="hidden" name="register" value="register">
302
+
303
+ <a id="login_button" onclick="document.registration_form.submit();return false;">Register</a>
304
+
305
+ </form>
306
+
307
+ ```
308
+
309
+ そして、打ち込まれたuseridとpasswordをdbに登録する処理が以下です
310
+
311
+ ```go
312
+
313
+ //echo
314
+
315
+ e.POST("/api/register", func(c echo.Context) error {
316
+
317
+ id := c.Param("userid") //フォームからidを取得しているつもり
318
+
319
+ password := c.Param("password") //フォームからpasswordを取得しているつもり
320
+
321
+ SaveIdOnDB(id, password)
322
+
323
+ return c.Render(http.StatusOK, "index", nil)
324
+
325
+ )}
326
+
327
+
328
+
329
+ type UserData struct {
330
+
331
+ gorm.Model
332
+
333
+ Userid string
334
+
335
+ Password string
336
+
337
+ }
338
+
339
+
340
+
341
+ func SaveUserData(userid, password string) {
342
+
343
+ db, err := gorm.Open("sqlite3", "test.sqlite3")
344
+
345
+ if err != nil {
346
+
347
+ panic("failed to connect database")
348
+
349
+ }
350
+
351
+ defer db.Close()
352
+
353
+ // Migrate the schema
354
+
355
+ db.AutoMigrate(&UserData{})
356
+
357
+ // Create
358
+
359
+ user := &UserData{Userid: userid, Password: password}
360
+
361
+ db.Create(&user)
362
+
363
+ ```
364
+
365
+
366
+
367
+ ###質問2
368
+
369
+ 先ほどからtest.sqlite3の中にレコードを作成してるわけなんですが、レコードの値をコマンドラインに出力するにはどうすればいいのでしょうか。(先日コメントでも申し上げた通り、fmt.Printlnするとポインタの値が出力されます)
370
+
371
+
372
+
373
+ 今はそれがわからないため、DB Browser for SQLiteというGUIソフトで中身を閲覧しています。
374
+
375
+ ![DB Browser for SQLite](4c603adfebdf08a6fb7fc3f8958c6bd2.png)

2

さらに追記しました

2017/09/13 12:06

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -160,7 +160,7 @@
160
160
 
161
161
 
162
162
 
163
- ・Readについて
163
+ **・Readについて**
164
164
 
165
165
  ```go
166
166
 
@@ -202,4 +202,22 @@
202
202
 
203
203
 
204
204
 
205
+ **・go-sqlite3パッケージについて**
206
+
207
+ mattnさんは回答において、go-sqlite3パッケージの関数等を直接使ってらっしゃらないと思うのですが、go-sqlite3はどこで使うのですか?
208
+
209
+ それとも、
210
+
211
+ ```go
212
+
213
+ //db, err := gorm.Open("ドライバ名称", "接続文字列")
214
+
215
+ db, err := gorm.Open("sqlite3", "foo.sqlite")
216
+
217
+ ```
218
+
219
+ go-sqlite3はドライバという役割であって、GORMと併用する場合は直接使わないものなんですかね?
220
+
221
+
222
+
205
223
  質問攻めすみません。

1

質問を追記しました

2017/09/11 10:27

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -89,3 +89,117 @@
89
89
  サブミットの処理はhtmlで"/api/login"にpostするようにして、go側のe.POST()の中にDB関係の処理を書けばいいのかなと思っています。
90
90
 
91
91
  なのでDBに関してを勉強しているというわけです。
92
+
93
+
94
+
95
+ #追記
96
+
97
+ **・GORMのCreateについて**
98
+
99
+ そもそも、GORMのCreateというのは、データベースのテーブルを作るという意味でしょうか?
100
+
101
+ つまり、
102
+
103
+ ```go
104
+
105
+ db.Create(&Product{Code: "L1212", Price: 2000})
106
+
107
+ db.Create(&Product{Code: "L1213", Price: 3000})
108
+
109
+ db.Create(&Product{Code: "L1214", Price: 4000})
110
+
111
+ db.Create(&Product{Code: "L1215", Price: 5000})
112
+
113
+ db.Create(&Product{Code: "L1216", Price: 6000})
114
+
115
+ db.Create(&Product{Code: "L1217", Price: 7000})
116
+
117
+ ```
118
+
119
+
120
+
121
+ このようなコードを実行すると、
122
+
123
+
124
+
125
+ | Code | Price |
126
+
127
+ |------------:|:------------:|
128
+
129
+ | L1212 | 2000 |
130
+
131
+ | L1213 | 3000 |
132
+
133
+ | L1214 | 4000 |
134
+
135
+ | L1215 | 5000 |
136
+
137
+ | L1216 | 6000 |
138
+
139
+ | L1217 | 7000 |
140
+
141
+
142
+
143
+ こういったテーブルを作成するということでしょうか。
144
+
145
+
146
+
147
+ **・マッピングとは**
148
+
149
+ マッピングとは噛み砕くとどういう処理でしょうか?
150
+
151
+ ORM(オブジェクト関係マッピング)特有の用語なのかなというのはわかるのですが。。
152
+
153
+ ```go
154
+
155
+ db.AutoMigrate(&Product{})
156
+
157
+ ```
158
+
159
+ このコードはどういう場合(タイミング)に書くものなんでしょうか?
160
+
161
+
162
+
163
+ ・Readについて
164
+
165
+ ```go
166
+
167
+ var products []Product
168
+
169
+ // Get all records
170
+
171
+ db.Find(&products)
172
+
173
+ //// SELECT * FROM products;
174
+
175
+ ```
176
+
177
+ これはProductテーブル内の全てのレコードを取得するという意味かと思うのですが
178
+
179
+ セレクトしたものをプリントしようとして
180
+
181
+ ```go
182
+
183
+ aa := db.Find(&products)
184
+
185
+ fmt.Println(aa)
186
+
187
+ ```
188
+
189
+ こう書いたのですが、
190
+
191
+ ```
192
+
193
+ &{0xc420179280 <nil> 6 0xc420174dc0 false 0 {0xc4200fbf40} 0xc420418420 map[] 0xc42016f710 <nil> <nil> false}
194
+
195
+ ```
196
+
197
+ このように出力されました。
198
+
199
+
200
+
201
+ これは、SELECTによって取得したものは、DBの操作でしか扱えない(型の問題上)ということなんでしょうか。
202
+
203
+
204
+
205
+ 質問攻めすみません。