前提
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

あなたの回答
tips
プレビュー