ginとFirestoreの接続
なぜ2つ接続するのか
クローンプロジェクトが進むにつれて、バーダンはrestfulを使い、
golang
を使い、gin
を使うことにしましたが、やはり多くの人がやっているので、dbで何をするか悩んでいました.nosql
を試してみましょう.結論:Googleがサポートする
firebase
のうちfirestore
を使用!firestore DB
Firebaseには複数のサービスがあり、firestoreはnosqlに基づいており、データの管理が容易です.
最も重要なのは
golang
支援がいいことです!同じ会社だからかな…れんどう
realtimeDBの接続を始めたばかりの頃はfirstore関数を書こうとしたのですがダメでした結論はよくつながっている.
メモを忘れないように~!
1.Firebaseプロジェクトを作成し、admin sdkを入れて初期化する
https://console.firebase.google.com/?hl=ko
でアイテムを作成します.
追加後、写真のクローンのようにアイテムが生成され、下部は
프로젝트명-uid
形式のprojectId
です.クリックするとconsoleが現れ、ここですべてが実現します.左側のメニューのfirstoreをクリックします.
このようにプロジェクトを作成すればfirstoreを使用できます!
今残っているのはginとの連動だけ!!!
auth問題でやらなければならないことがあるので、おすすめの方法で
admin sdk
に接続したほうがいいです.https://firebase.google.com/docs/admin/setup?hl=ko#go
このサイトはA to Zを説明しており、バインドしやすい.
まずgo getでfirebaseパッケージを追加します.
次に、
키
を発行して連動する必要がある「リンク」をクリックしてアクセスします.
サービスキーを生成すればいい!これにより
json
ファイルが受信され、jsonファイルのパスを指定してenvファイルに保存して管理することを推奨します.ここまで真似すれば、理由もなく認証を突破することができます.
2.接続先
環境変数を管理するために、パッケージをダウンロードしました.
.env
ファイルで環境変数を宣言します.そして...問題がある...例題に従ってやって、今firebaseにつながって書いて、firestoreに関する例題はいつも関数がないことを表示します!!
だから.最終的にFirestoreパッケージを再ダウンロードしました(...)
https://pkg.go.dev/cloud.google.com/go/firestore#section-documentation
連動方法は似ている.newAppをしないで直接newClientをします
ctx := context.Background()
client, err := firestore.NewClient(ctx, "projectID")
if err != nil {
// TODO: Handle error.
}
自分のものをprojectID
部に入れると、本当に簡単です.
package config
import (
"cloud.google.com/go/firestore"
"context"
"fmt"
"log"
"os"
"sync"
)
type FirestoreDB struct {
client *firestore.Client
url string
}
var dbInstance *FirestoreDB
var once sync.Once
func DBClient() *firestore.Client {
once.Do(func() {
fmt.Println("DB 연결 시작 --- FIREBASE ---")
dbInstance = new(FirestoreDB)
makeDBClient(dbInstance)
fmt.Println("DB 연결 완료 --- FIREBASE ---")
})
return dbInstance.client
}
// makeDBClient Client 주입
func makeDBClient(rtb *FirestoreDB) {
fmt.Println("dbstore name : " + os.Getenv("FIREBASE_FIRESTORE_DATABASE_PRODUCT_ID"))
ctx := context.Background()
client, err := firestore.NewClient(ctx, os.Getenv("FIREBASE_FIRESTORE_DATABASE_PRODUCT_ID"))
if err != nil {
log.Fatal(err)
}
rtb.client = client
}
クライアントを入手して、使えばいい!ワンスを使ってモノトーンを使いたかったのですが、defer
も処理しなければならないということで、まだ完成していないコードが、これでまず接続できてよかった!!Reference
この問題について(ginとFirestoreの接続), 我々は、より多くの情報をここで見つけました https://velog.io/@artelee/gin과-firestore-연동하기-dhz4kft3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol