質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

GoでDB接続すると怒られる(runtime error)

koki.0429
kurokuro

総合スコア39

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

1回答

0グッド

0クリップ

801閲覧

投稿2022/08/16 06:14

編集2022/08/16 06:23

実現したいこと

Goを使用してMySQLに接続したい

発生している問題・エラーメッセージ

2022/08/16 14:56:07 [Recovery] 2022/08/16 - 14:56:07 panic recovered: GET / HTTP/1.1 Host: 127.0.0.1:8887 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate, br Accept-Language: ja,en-US;q=0.9,en;q=0.8 Cache-Control: no-cache Connection: keep-alive Pragma: no-cache Sec-Ch-Ua: "Chromium";v="104", " Not A;Brand";v="99", "Google Chrome";v="104" Sec-Ch-Ua-Mobile: ?0 Sec-Ch-Ua-Platform: "macOS" Sec-Fetch-Dest: document Sec-Fetch-Mode: navigate Sec-Fetch-Site: none Sec-Fetch-User: ?1 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36 runtime error: invalid memory address or nil pointer dereference /usr/local/Cellar/go/1.19/libexec/src/runtime/panic.go:260 (0x104b595) panicmem: panic(memoryError) /usr/local/Cellar/go/1.19/libexec/src/runtime/signal_unix.go:835 (0x104b565) sigpanic: panicmem() /usr/local/Cellar/go/1.19/libexec/src/database/sql/sql.go:883 (0x13141b8) (*DB).Close: db.mu.Lock() /Users/kurokihiroki/go-connection-database/go_sample/main.go:34 (0x1322614) main.func1: }) /Users/kurokihiroki/go/pkg/mod/github.com/gin-gonic/gin@v1.7.4/context.go:165 (0x130d661) (*Context).Next: c.handlers[c.index](c) /Users/kurokihiroki/go/pkg/mod/github.com/gin-gonic/gin@v1.7.4/recovery.go:99 (0x130d64c) CustomRecoveryWithWriter.func1: c.Next() /Users/kurokihiroki/go/pkg/mod/github.com/gin-gonic/gin@v1.7.4/context.go:165 (0x130c7a6) (*Context).Next: c.handlers[c.index](c) /Users/kurokihiroki/go/pkg/mod/github.com/gin-gonic/gin@v1.7.4/logger.go:241 (0x130c789) LoggerWithConfig.func1: c.Next() /Users/kurokihiroki/go/pkg/mod/github.com/gin-gonic/gin@v1.7.4/context.go:165 (0x130b85d) (*Context).Next: c.handlers[c.index](c) /Users/kurokihiroki/go/pkg/mod/github.com/gin-gonic/gin@v1.7.4/gin.go:489 (0x130b4e5) (*Engine).handleHTTPRequest: c.Next() /Users/kurokihiroki/go/pkg/mod/github.com/gin-gonic/gin@v1.7.4/gin.go:445 (0x130b1a4) (*Engine).ServeHTTP: engine.handleHTTPRequest(c) /usr/local/Cellar/go/1.19/libexec/src/net/http/server.go:2947 (0x121c78b) serverHandler.ServeHTTP: handler.ServeHTTP(rw, req) /usr/local/Cellar/go/1.19/libexec/src/net/http/server.go:1991 (0x1219086) (*conn).serve: serverHandler{c.server}.ServeHTTP(w, w.req) /usr/local/Cellar/go/1.19/libexec/src/runtime/asm_amd64.s:1594 (0x10664a0) goexit: BYTE $0x90 // NOP

該当のソースコード

go

1package main 2 3import ( 4 "log" 5 "github.com/gin-gonic/gin" 6 "database/sql" 7 8 _ "github.com/go-sql-driver/mysql" 9) 10 11var db *sql.DB 12 13func main() { 14 // ルーターを準備 15 router := gin.Default() 16 17 // URLとハンドラ-の設定 18 router.GET("/", func (cxt *gin.Context) { 19 // cxt.String(200, "Hello World!!") 20 21 var err error 22 23 dbInfo := "root:root@localhost:8889/tcp(DB名)?charset=utf8mb4" 24 25 // DB接続 26 db, err = sql.Open("mysql", dbInfo) 27 28 // 接続が終了したらクローズする 29 defer db.Close() 30 31 if err != nil { 32 cxt.String(200, "接続できてる") 33 } 34 }) 35 36 // サーバー起動 37 err := router.Run("127.0.0.1:8887") 38 39 if err != nil { 40 log.Fatal("サーバー起動に失敗", err) 41 } 42}

試したこと

シャドーイングによる変数の初期化等が影響しているかと思い、変数を定義してみましたが、変わらず。

補足情報(FW/ツールのバージョンなど)

Go:1.19

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

自己解決

そもそもDB接続できていないため、エラーが起きるのは当たり前でした。
一旦、接続できる箇所からやり直します。

投稿2022/08/16 07:16

koki.0429

総合スコア39

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。