0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TILE38紹介(3) :Goプログラムからのアクセス1

Last updated at Posted at 2019-01-28
TILE38紹介
TILE38紹介(1) :基本コマンド
TILE38紹介(2) :空間系コマンド
TILE38紹介(3) :Goプログラムからのアクセス1
TILE38紹介(4) :Goプログラムからのアクセス2
TILE38紹介(5) :Geofencing

TL;DR

  • TILE38はredisのプロトコルに対応しているのでredisクライアントからのアクセスが可能である。
  • 本章ではGoでの実装例としてredigoライブラリを使用した基本的なプログラム実装例を説明する。

データ登録と取得

-「 TILE38紹介(1) :基本コマンド」で紹介したtile38-cliを使用したデータ登録と取得について、ここではGoプログラムから行う。

  • goredisではDial関数を使用してコネクションを取得し、Do関数でTILE38のコマンドを実行し、Close関数でコネクションを終了する。
main.go
package main

import (
        "encoding/json"
        "fmt"
        "log"
        "reflect"

        "github.com/garyburd/redigo/redis"
)

func main() {
        // db connect
        c, err := redis.Dial("tcp", ":9851")
        if err != nil {
                log.Fatalf("Could not connect: %v\n", err)
        }
        defer c.Close()

        // SET location
        ret, err := c.Do("SET", "location", "me", "POINT", 35.6581, 139.6975)
        if err != nil {
                log.Fatalf("Could not SET: %v\n", err)
        }
        fmt.Printf("SET ret:%s\n", ret)

        // GET location
        ret, err = c.Do("GET", "location", "me")
        if err != nil {
                log.Fatalf("Could not GET: %v\n", err)
        }
        fmt.Printf("GET ret:%s\n", ret)
}
  • Dial関数に接続に必要なプロトコル、接続先情報を引数として指定してコネクションを作成する。
  • ここでは直接Dial関数を使用したが、redigoのコネクションプール機能(Pool型)を使用すれば使用リソースの制御と接続オーバヘッドの削減をすることが出来る。
  • Do関数にはtile38-cliと同じコマンド(string)と引数を渡すことになるが、引数部分はinterface{}として定義されおり、数値については数値型で直接渡すことになる。
  • 以下に実行例を示す。
$ go run main.go 
SET ret:OK
GET ret:{"type":"Point","coordinates":[139.6975,35.6581]}
$ 
  • SETコマンドの結果の戻り値は文字列が返り、GETコマンドはJSONオブジェクトの[]byte型の値が返る。
  • tile38-cliでGETを実行した場合に{"ok":true,"object":{"type":"Point","coordinates":[139.6975,35.6581]},"elapsed":"9.998µs"}と言うJSON文字列が標準出力されるが、この「"object":〜」の部分が返る。
  • 本説明ではコマンド実行で返却されたオブジェクトを表示するに留めたが、実際のプログラムではGoの構造体等のオブジェクトとして扱う場合が多いと考えられる。事象において説明を予定している。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?