Go初心者ですm(_ _"m)
軽いCRUDを実装しようとしています。
前提・実現したいこと
Model構造体をスライス化し、GORMのdb.Find()でusersテーブルを全件取得したいです。
発生している問題・エラーメッセージ
fmt.Printf("%+v\n", Users) の出力結果
[]
該当のソースコード
user.go
Go
1package models 2 3import( 4 "github.com/wcl48/valval" 5 "time" 6 "regexp" 7) 8 9type User struct { 10 Id int64 11 Name string `sql:"size:255"` 12 CreatedAt time.Time 13 UpdatedAT time.Time 14 DeletedAt time.Time 15}
main.go
Go
1package main 2 3import ( 4 "github.com/zenazn/goji" 5 "github.com/jinzhu/gorm" 6 "github.com/zenazn/goji/web" 7 "github.com/zenazn/goji/web/middleware" 8 _ "github.com/go-sql-driver/mysql" 9) 10 11var db *gorm.DB 12 13func main() { 14 user := web.New() 15 goji.Handle("/user/*", user) 16 17~~中略~~ 18 user.Get("/index", UserIndex) 19 20 goji.Serve() 21} 22 23func init(){ 24 db, _ = gorm.Open("mysql", "root:@tcp(127.0.0.1:3306)/test") 25}
user_controller.go
Go
1package main 2 3import ( 4 "github.com/wcl48/valval" 5 "github.com/zenazn/goji/web" 6 7 "encoding/base64" 8 "fmt" 9 "html/template" 10 "models" 11 "net/http" 12 "strconv" 13 "strings" 14) 15 16var tpl *template.Template 17 18const Password = "user:user" 19 20type FormData struct { 21 User models.User 22 Mess string 23} 24 25func UserIndex(c web.C, w http.ResponseWriter, r *http.Request) { 26 Users := []models.User{} 27 fmt.Printf("%+v\n", Users) 28 db.Find(&Users) 29 tpl = template.Must(template.ParseFiles("view/user/index.html")) 30 tpl.Execute(w,Users) 31} 32 33~~以下略~~
また、テンプレートファイルは以下のように記述しています。
Go
1<html> 2<p>user index</p> 3{{range .}} 4<a href="/user/edit/{{.Id}}">{{.Name}}</a><br/> 5{{end}} 6<a href="/user/new">new</a> 7</html>
試したこと
Go
1Users := []models.User{} 2↓ 3Users := models.User{} 4にしたところ、fmt.Printf("%+v\n", Users)は以下の様な出力結果になりました。 5 6{Id:0 Name: CreatedAt:0001-01-01 00:00:00 +0000 UTC UpdatedAT:0001-01-01 00:00:00 +0000 UTC DeletedAt:0001-01-01 00:00:00 +0000 UTC}
DBエラーの確認
Go
1func UserIndex(c web.C, w http.ResponseWriter, r *http.Request) { 2 Users := []models.User{} 3 fmt.Printf("%+v\n", Users) 4 db.Find(&Users) 5 db.GetErrors() //追加 6 tpl = template.Must(template.ParseFiles("view/user/index.html")) 7 tpl.Execute(w,Users) 8}
出力結果
2019/07/10 03:23:40.985372 Starting Goji on [::]:8080 2019/07/10 03:23:44.281110 [ip-172-31-20-61/A9HrA4LsBZ-000001] Started GET "/user/index" from 127.0.0.1:33898 [] 2019/07/10 03:23:44.285098 [ip-172-31-20-61/A9HrA4LsBZ-000001] Returning 200 in 3.959931ms
エラーの出力はありませんでした。
初歩的なことかもしれませんが、よろしくお願いいたします。
main.go の `init` でDB接続していますが、接続先が 128.0.0.1になっていますが、127.0.0.1のまちがいではありませんか?
db接続時、戻り値のerrorを見ていませんが、errorでないことを確認していますか?
ありがとうございます。
DB接続先は127.0.0.1にしていたのですが、
こちらに投稿する際に何かの拍子に変更してしまったようです・・・。
なので、実際は127.0.0.1でございました。
申し訳ないです、質問内容を編集しておきます。
念のため、127.0.0.1であることを確認した上で、
再度ログを出した結果が以下になります。
2019/07/02 06:25:33.571295 Starting Goji on [::]:8080
2019/07/02 06:25:37.077410 [ip-172-31-20-61/Gt9JZPRena-000001] Started GET "/user/index" from 127.0.0.1:55524
[]
2019/07/02 06:25:37.080088 [ip-172-31-20-61/Gt9JZPRena-000001] Returning 200 in 2.646623ms
findのあとテンプレートにデータを入れているみたいですが、テンプレートの出力はどうなっていますか?
ありがとうございます。
内容追記いたしました。
よろしくお願いします。
find() 直後に db.GetErrors() を出力して、エラーが出ていないか確認できますか?
内容追記しました。
DBエラーが出ている痕跡はありませんでした・・・。
よろしくお願いします。