回答編集履歴

3

記載内容をシンプルにしました

2020/03/08 16:18

投稿

d_tutuz
d_tutuz

スコア730

test CHANGED
@@ -34,21 +34,15 @@
34
34
 
35
35
 
36
36
 
37
- 上記実装上の以下の部分で
37
+ 次に `Query` 戻り値は `*sql.Rows` 型です。これは `[]*model.Task` 型ではない以下の実装はコンパイルエラーになりま
38
38
 
39
39
 
40
40
 
41
41
  ```go
42
42
 
43
- taskList := []*model.Task
44
-
45
43
  taskList, err = tr.DB.Query("SELECT * FROM t_task")
46
44
 
47
45
  ```
48
-
49
-
50
-
51
- 次に `Query` の戻り値は `*sql.Rows` 型です。これは `[]*model.Task` 型ではないのでコンパイルエラーになります。
52
46
 
53
47
 
54
48
 

2

コメントの内容を本文にマージ

2020/03/08 16:18

投稿

d_tutuz
d_tutuz

スコア730

test CHANGED
@@ -1,3 +1,39 @@
1
+ まず変数の宣言方法が間違っています。
2
+
3
+
4
+
5
+ ```go
6
+
7
+ taskList := []*model.Task
8
+
9
+ ```
10
+
11
+
12
+
13
+ のエラーに関してはシンタックスが間違っています。上記の方法にならうならば
14
+
15
+
16
+
17
+ ```go
18
+
19
+ taskList := []*model.Task{}
20
+
21
+ ```
22
+
23
+
24
+
25
+ いうように宣言する必要があります。ちなみにスライスの宣言は以下のようにするのがおすすめです。
26
+
27
+
28
+
29
+ ```go
30
+
31
+ var taskList []*model.Task
32
+
33
+ ```
34
+
35
+
36
+
1
37
  上記の実装上の以下の部分ですが
2
38
 
3
39
 
@@ -12,7 +48,7 @@
12
48
 
13
49
 
14
50
 
15
- `Query` の戻り値は `*sql.Rows` 型です。これは `[]*model.Task` 型ではないのでコンパイルエラーになります。
51
+ 次に `Query` の戻り値は `*sql.Rows` 型です。これは `[]*model.Task` 型ではないのでコンパイルエラーになります。
16
52
 
17
53
 
18
54
 
@@ -70,7 +106,7 @@
70
106
 
71
107
 
72
108
 
73
- ---
109
+ ------
74
110
 
75
111
 
76
112
 

1

エラーチェックと補足資料の追記

2020/03/08 16:15

投稿

d_tutuz
d_tutuz

スコア730

test CHANGED
@@ -67,3 +67,71 @@
67
67
  }
68
68
 
69
69
  ```
70
+
71
+
72
+
73
+ ---
74
+
75
+
76
+
77
+ 余談ですが、`rows.Next()` での呼び出し時にエラーが発生する場合があるので、以下の追加した部分のようにエラーをチェックするのを推奨します。
78
+
79
+
80
+
81
+ ```diff
82
+
83
+ func (tr *TaskRepository) All() (tasks []*model.Task, err error) {
84
+
85
+ var taskList []*model.Task
86
+
87
+ rows, err := tr.DB.Query("SELECT * FROM t_task")
88
+
89
+
90
+
91
+ if err != nil {
92
+
93
+ log.Fatal(err)
94
+
95
+ }
96
+
97
+ defer rows.Close()
98
+
99
+
100
+
101
+ for rows.Next() {
102
+
103
+ var task model.Task
104
+
105
+
106
+
107
+ err := rows.Scan(&task)
108
+
109
+
110
+
111
+ if err != nil {
112
+
113
+ log.Fatal(err)
114
+
115
+ }
116
+
117
+
118
+
119
+ taskList = append(taskList, &task)
120
+
121
+ }
122
+
123
+ + if err := rows.Err(); err != nil {
124
+
125
+ + return nil, err
126
+
127
+ + }
128
+
129
+ return taskList, nil
130
+
131
+ }
132
+
133
+ ```
134
+
135
+
136
+
137
+ 少し古い資料にはなりますが [Go database/sql tutorial Handling Errors](http://go-database-sql.org/errors.html) の Errors From Iterating Resultsets にも同様の内容が記載されています。こちらは公式の [Wiki](https://github.com/golang/go/wiki) のリンクに記載されている資料になります。