# Go LangでWebAPIを作成するために、GolangでMySQLに接続する

3 min read
Table of Contents

HeidiSQLでSQLを実行する

次に、Go LangでWebAPIを作成するために、まずはDockerでMySQLを構築するで作ったMySQLにデータベースを作成する。HeidiSQLから作成しようとするが、

SQL 0A80E90FC (1044): Access denied for user 'your_username'@'%' to database 'project'uery

という権限エラーが出るようになった。

version: '3'
services:
mysql:
image: mysql:latest
container_name: project
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: project
MYSQL_USER: username
MYSQL_PASSWORD: password
ports:
, "3306:3306"
volumes:
- ./data:/var/lib/mysql

に変更したらできた。ちょっと理由はわからない。

で、projectというデータベースでSQLを実行する。

CREATE TABLE sample (
id INT AUTO_INCREMENT PRIMARY KEY,
firstName VARCHAR(255),
lastName VARCHAR(255),
isActive BOOLEAN DEFAULT TRUE
);

これでSampleのテーブルを作成することが出来た。

GoLangでテーブルを作成する

次にGORMをインストールする。

go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite

を実行すると、

require (
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/mattn/go-sqlite3 v1.14.18 // indirect
gorm.io/driver/sqlite v1.5.4 // indirect
gorm.io/gorm v1.25.5 // indirect
)

更新された。

上のふたつは謎だけど、それっぽいのは入ってきた。

よく考えたらMySQLを使用するので、

go get -u gorm.io/driver/mysql

だった。

ちなみに不要パッケージの削除方法はわからなかった。(要調査)

main.goに下記をコピペ。

package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type User struct {
// gorm.Modelをつけると、idとCreatedAtとUpdatedAtとDeletedAtが作られる
gorm.Model
Name string
Age int
IsActive bool
}
func main() {
// dbを作成します
db := dbInit()
// dbをmigrateします
db.AutoMigrate(&User{})
}
func dbInit() *gorm.DB {
dsn := "root:password@tcp(127.0.0.1:3306)/project?charset=utf8mb4&parseTime=true"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
return db
}

これで実行すると

$ go run src/main.go
2023/11/28 17:51:13 C:/01_myPROJECT/project-Backend/src/main.go:22 SLOW SQL >= 200ms
[282.042ms] [rows:0] CREATE TABLE `users` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime( (3) NULL,`name` longtext,`age` bigint,`is_active` boolean,PRIMARY KEY (`id`),INDEX `idx_users_deleted_at` (`deleted_at`))

作成したDBusersテーブルが作成された。

これで接続が確認できた。

My avatar

Thanks for reading my blog post! Feel free to check out my other posts or contact me via the social links in the footer.


More Posts

Comments