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/gormgo 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`))作成したDBにusersテーブルが作成された。
これで接続が確認できた。