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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Echo(フレームワーク)

Echoは、Go言語で作られたフレームワーク。非常に軽量で、小~中規模のアプリ構成を想定した仕様になっています。公式ドキュメントが用意されており、初心者でも始めやすい点が特徴です。

Go

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

Q&A

0回答

1405閲覧

goland(Echo)からmysqlへの接続ができない

infra____

総合スコア90

Echo(フレームワーク)

Echoは、Go言語で作られたフレームワーク。非常に軽量で、小~中規模のアプリ構成を想定した仕様になっています。公式ドキュメントが用意されており、初心者でも始めやすい点が特徴です。

Go

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

0グッド

0クリップ

投稿2022/12/21 11:07

前提

docker-composeでgolandの実行環境とmysqlの実行環境を起動している

実現したいこと

goland(Echo)からmysqlに接続したい

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

{"time":"2022-12-21T19:56:55.302447+09:00","level":"FATAL","prefix":"echo","file":"main.go","line":"69","message":"dial tcp: lookup mysql: no such host"} exit status 1

該当のソースコード

goland

1package main 2 3import ( 4 "log" 5 "net/http" 6 "os" 7 8 "github.com/flosch/pongo2" 9 "github.com/labstack/echo/v4" 10 "github.com/labstack/echo/v4/middleware" 11 12 "time" 13 14 _ "github.com/go-sql-driver/mysql" // Using MySQL driver 15 "github.com/jmoiron/sqlx" 16) 17 18const tmplPath = "src/template/" 19 20var db *sqlx.DB 21var e = createMux() 22 23func main() { 24 25 db = connectDB() 26 27 e.GET("/impression/1", impression) 28 29 e.Logger.Fatal(e.Start(":8080")) 30} 31 32func createMux() *echo.Echo { 33 e := echo.New() 34 35 e.Use(middleware.Recover()) 36 e.Use(middleware.Logger()) 37 e.Use(middleware.Gzip()) 38 39 return e 40} 41 42func impression(c echo.Context) error { 43 data := map[string]interface{}{ 44 "Message": "広告ID1", 45 "Now": time.Now(), 46 } 47 return render(c, "article/1.html", data) 48} 49 50func htmlBlob(file string, data map[string]interface{}) ([]byte, error) { 51 return pongo2.Must(pongo2.FromCache(tmplPath + file)).ExecuteBytes(data) 52} 53 54func render(c echo.Context, file string, data map[string]interface{}) error { 55 b, err := htmlBlob(file, data) 56 if err != nil { 57 return c.NoContent(http.StatusInternalServerError) 58 } 59 return c.HTMLBlob(http.StatusOK, b) 60} 61 62func connectDB() *sqlx.DB { 63 dsn := os.Getenv("DSN") 64 db, err := sqlx.Open("mysql", dsn) 65 if err != nil { 66 e.Logger.Fatal(err) 67 } 68 if err := db.Ping(); err != nil { 69 e.Logger.Fatal(err) 70 } 71 log.Println("db connection succeeded") 72 return db 73} 74

DSNの値は、以下です。
"test_user:password@tcp(db:3306)/test_database?parseTime=true&autocommit=0&sql_mode=%27TRADITIONAL,NO_AUTO_VALUE_ON_ZERO,ONLY_FULL_GROUP_BY%27"

###試したこと
下記記事を参照
https://qiita.com/soicchi/items/505299d20dc50a8faf9f
https://zenn.dev/ajapa/articles/443c396a2c5dd1

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問