GolangとNoSQLであるMongoDBとは相性がいいらしく、両方セットで使われる機会が多いです。
本記事は、GolangからMongoDBへの接続方法を記載します。
<目次>
事前準備
本記事は、Mac環境で動作させますが、Windowsでも動くと思います。
MongoDBのインストール
Homebrewをインストールしてあれば、以下のコマンドでMongoDBをインストールできます。
1 2 |
brew update brew install mongodb |
MongoDBのユーザーも作成しておきます。
MongoDBをインストールしたらterminal上で以下のコマンドを実行してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
monogo > use admin switched to db admin > db.createUser({user:"mongod",pwd:"mongod",roles:[{ role:"userAdminAnyDatabase", db:"admin" }]}) Successfully added user: { "user" : "mongod", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] } |
フォルダ構成
次に、以下のフォルダとファイルを作成してください。※GOPATHが通っているところがいいと思います。
1 2 3 4 |
. ├── procon_config │ └── procon_config.go # 接続情報を記述 └── procon_mongo.go # 接続するコードを記述 |
実装
最初に接続コードを書きます。接続に必要なパッケージ(importに記載しているmongoなど)は、各々「go get」コマンドでインストールしてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
// procon_mongo.go package main import ( "context" "fmt" "github.com/hoge/golang-concurrency/mongo/procon_config" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) type key string const ( HostKey = key("hostKey") UsernameKey = key("usernameKey") PasswordKey = key("passwordKey") DatabaseKey = key("databaseKey") ) var ctx context.Context var client *mongo.Client func init() { ctx = context.Background() ctx, cancel := context.WithCancel(ctx) defer cancel() ctx = context.WithValue(ctx, HostKey, procon_config.MongoHost) ctx = context.WithValue(ctx, UsernameKey, procon_config.MongoUser) ctx = context.WithValue(ctx, PasswordKey, procon_config.MongoPassword) ctx = context.WithValue(ctx, DatabaseKey, procon_config.MongoDb) uri := fmt.Sprintf(`mongodb://%s:%s@%s/%s`, ctx.Value(UsernameKey).(string), ctx.Value(PasswordKey).(string), ctx.Value(HostKey).(string), ctx.Value(DatabaseKey).(string), ) clientOpetions := options.Client().ApplyURI(uri) var err error client, err = mongo.Connect(ctx, clientOpetions) err = client.Ping(ctx, nil) if err != nil { fmt.Println(err) } else { fmt.Println("Mongo Connected") } } func main() { fmt.Println("Connection Test") } |
続いて、設定ファイルを記述します。
1 2 3 4 5 6 7 8 9 |
// procon_config.go package procon_config const ( MongoHost = "127.0.0.1" MongoUser = "mongod" MongoPassword = "mongod" MongoDb = "admin" ) |
個人的には、contextパッケージを使うところがポイントです。
補足を書こうと思ったのですが、特に難しいところはないですね。パッと見意味は読み取れると思います。
実行結果を見てみましょう。
1 2 3 |
$ go run procon_mongo.go Mongo Connected Connection Test |
無事に接続できましたね!
それでは、また!
コメントを残す
コメントを投稿するにはログインしてください。