NCMBはモバイル向けのBaaS(mobile Backend as a Service)ですが、サーバー側のデータとNCMB上のデータを連係させたいというニーズは良くあります。
そんなときには各言語向けのSDKがあると便利です。サーバー向けにはRuby、Python、PHP、Java、C#のSDKがあります(すべて公式サポート対象外の、コミュニティSDKという位置づけです)。
新しくGo言語向けのSDK開発をはじめたので、その使い方を紹介します。今回はデータの取得方法を解説します。
ソースコード
ソースコードはGitHubにて公開しています。ライセンスはMIT Licenseになります。
インストール
SDKのインストールは下記コマンドで行います。
go get -u github.com/NCMBMania/ncmb_go
インポート
続けてSDKをインポートします。
import (
"github.com/NCMBMania/ncmb_go"
)
初期化
NCMBより取得したアプリケーションキー、クライアントキーを使って初期化します。
ncmb := NCMB.Initialize("YOUR_APPLICATION_KEY", "YOUR_CLIENT_KEY")
データの新規作成
Item
メソッドで新規データのインスタンスを作ります。引数はクラス名です。
item := ncmb.Item("Hello")
データの適用
アイテムに対して、データをセットします。利用できる型は string
int
float64
time.Time
bool
配列、Mapなどになります。位置情報を扱うためのGeoPoint型もあります。
今後、NCMB独自の型(ポインターやデータストア)も使えるようにします。
hello.Set("string", "Hello, World!").Set("string2", "こんにちは")
hello.Set("number", 139.77421902)
hello.Set("boolean", true)
hello.Set("array", []interface{}{"a", "b", "c"})
hello.Set("object", map[string]string{"key": "value", "key2": "value2"})
hello.Set("null", nil)
hello.Set("date", time.Now())
geo := ncmb.GeoPoint(35.698683, 139.77421902)
hello.Set("geo", geo)
キーチェーンにも対応していますが、Go言語は改行が使えないので、多用すると見づらくなりそうです。
データの保存
保存は Save
メソッドで行います。保存がうまくいっていれば、 bol = true
になります。
bol, err := item.Save()
データの取り出し方
データは Get
または Get〜
といったメソッドを使って取り出します。Getの場合は interface{}
になるので、自分でキャストする必要があります。用意しているメソッドは次の通りです。
- GetString(key string, defaultValue ...string) (string, error)
- GetDate(key string, defaultValue ...time.Time) (time.Time, error) {
- GetArray(key string, defaultValue ...[]interface{}) ([]interface{}, error)
- GetMap(key string, defaultValue ...map[string]interface{}) (map[string]interface{}, error)
- GetBool(key string, defaultValue ...bool) (bool, error)
- GetGeoPoint(key string, defaultValue ...GeoPoint) (GeoPoint, error)
- GetNumber(key string, defaultValue ...float64) (float64, error)
以下のように使います。
str, err := hello.GetString("string")
num, err := hello.GetNumber("number")
bol, err = hello.GetBool("boolean")
arr, err := hello.GetArray("array")
date, err := hello.GetDate("date")
geo, err = hello.GetGeoPoint("geo")
2つ目の引数はデフォルト値です。もし、該当するフィールドがなかったり、その値が入っていない時には、2つ目の引数を返します。2つ目の引数を指定しておけば、 err
のチェックが不要になる場合はありそうです(型が違っている場合もあるので、チェック不要かと言われると難しいですが)。
str, _ := hello.GetString("noField", "なし") // -> "なし"
null
の場合は Get
を使ってください。
val, err := hello.Get("null")
fmt.Println(val == nil) // true
注意点
数値はすべて float64 で返ってきます。intで入れても float64 になるので注意してください。
まとめ
まだ基本的な機能しかありませんが、徐々にバージョンアップしていきます。
Go言語を使ってWebアプリケーションを開発している方は、そのデータ保存先としてNCMBを利用してみてください。