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

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

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

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

解決済

gormとgo-sqlite3の併用の仕方を教えてください!

削除済ユーザー
削除済ユーザー

総合スコア0

Go

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

1回答

0評価

0クリップ

17閲覧

投稿2017/09/10 16:14

編集2022/01/12 10:58

#まず
echoに関する質問3回目です。
いつもお世話になってます。

#やったこと
gormを少し触りました。
当方DBを扱ったことがないのでなんとなくですが。
[gormのドキュメント](http://jinzhu\.me/gorm/\)を真似してファイルを作ることはできました。
以下該当コード
DB関係は別パッケージに切り出しました。
まずmain.goで関数を呼び出す部分

go

e\.GET\("/api/register", func\(c echo\.Context\) error { //アクセスするだけでいいため、とりあえずGETにしています plugin\.CreateDB\(\) //下記で示す関数です return c\.Render\(http\.StatusOK, "index", nil\) //特に何も返したくない場合何を書けばいいのかわからなかったので、適当に書きました }\)

CreateDB関数(このような関数は実際には必要ないかと思われますが、テストなのでファイルを作るだけの関数を用意しました)

go

type Product struct { //おそらくDBの形式を模した何か\(\?\) gorm\.Model Code string Price uint } func CreateDB\(\) { db, err := gorm\.Open\("sqlite3", "test\.db"\) //ファイル作成 if err != nil { panic\("failed to connect database"\) } defer db\.Close\(\) db\.Create\(&Product{Code: "L1212", Price: 1000}\) //先ほどの構造体を利用して書き込み }

このような感じです。

#質問

  • go-sqlite3はどのようにgormと併用すればいいのか
  • ドキュメントでは何故か_ "github\.com/jinzhu/gorm/dialects/sqlite"がインポートされていたがそれはなんなのか

が知りたいです。
#ログインのサブミットに関して
サブミットの処理はhtmlで"/api/login"にpostするようにして、go側のe.POST()の中にDB関係の処理を書けばいいのかなと思っています。
なのでDBに関してを勉強しているというわけです。

#追記
**・GORMのCreateについて**
そもそも、GORMのCreateというのは、データベースのテーブルを作るという意味でしょうか?
つまり、

go

db\.Create\(&Product{Code: "L1212", Price: 2000}\) db\.Create\(&Product{Code: "L1213", Price: 3000}\) db\.Create\(&Product{Code: "L1214", Price: 4000}\) db\.Create\(&Product{Code: "L1215", Price: 5000}\) db\.Create\(&Product{Code: "L1216", Price: 6000}\) db\.Create\(&Product{Code: "L1217", Price: 7000}\)

このようなコードを実行すると、

CodePrice
L12122000
L12133000
L12144000
L12155000
L12166000
L12177000

こういったテーブルを作成するということでしょうか。

**・マッピングとは**
マッピングとは噛み砕くとどういう処理でしょうか?
ORM(オブジェクト関係マッピング)特有の用語なのかなというのはわかるのですが。。

go

db\.AutoMigrate\(&Product{}\)

このコードはどういう場合(タイミング)に書くものなんでしょうか?

**・Readについて**

go

var products \[\]Product // Get all records db\.Find\(&products\) //// SELECT \* FROM products;

これはProductテーブル内の全てのレコードを取得するという意味かと思うのですが
セレクトしたものをプリントしようとして

go

aa := db\.Find\(&products\) fmt\.Println\(aa\)

こう書いたのですが、

&{0xc420179280 <nil> 6 0xc420174dc0 false 0 {0xc4200fbf40} 0xc420418420 map\[\] 0xc42016f710 <nil> <nil> false}

このように出力されました。

これは、SELECTによって取得したものは、DBの操作でしか扱えない(型の問題上)ということなんでしょうか。

**・go-sqlite3パッケージについて**
mattnさんは回答において、go-sqlite3パッケージの関数等を直接使ってらっしゃらないと思うのですが、go-sqlite3はどこで使うのですか?
それとも、

go

//db, err := gorm\.Open\("ドライバ名称", "接続文字列"\) db, err := gorm\.Open\("sqlite3", "foo\.sqlite"\)

go-sqlite3はドライバという役割であって、GORMと併用する場合は直接使わないものなんですかね?

質問攻めすみません。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

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

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

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Go

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