1. 程式人生 > >Go實戰--golang中使用firebase實時資料庫(zabawaba99/firego)

Go實戰--golang中使用firebase實時資料庫(zabawaba99/firego)

生命不止,繼續 go go go !!!

今天,就跟大家一起學習分享一下golang中如何使用firebase的實時資料庫。

Firebase 實時資料庫

利用我們的 NoSQL 雲端資料庫儲存和同步資料。資料會跨所有客戶端進行實時同步,無論您的應用是否處於離線狀態。

Firebase 實時資料庫是一種託管在雲端的資料庫。它會將資料儲存為 JSON,並將其實時同步到每個關聯的客戶端。使用 Android、iOS 和 JavaScript SDK 構建跨平臺應用時,所有客戶端共享一個實時資料庫例項並自動接收包含最新資料的更新。

註冊firebase賬號
建立專案
這裡寫圖片描述

點選規則,鍵入:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

這裡寫圖片描述

zabawaba99/firego

Star: 278

獲取:
go get -u gopkg.in/zabawaba99/firego.v1

寫入資料

package main

import "log"
import "github.com/zabawaba99/firego"

func main() {
    fb := firego.New("https://dabaojian-bcb26.firebaseio.com", nil)

    v := map
[string]interface{}{ "name": "SuperWang", "location": "Beijing", "age": 28, "Likes": []string{"Movie", "Football"}, } if err := fb.Set(v); err != nil { log.Fatal(err) } }

在你的firebase控制檯,就會看到我們寫入的資料。

讀取資料

package main

import "log"
import "fmt" import "github.com/zabawaba99/firego" func main() { fb := firego.New("https://dabaojian-bcb26.firebaseio.com", nil) //post data to firebase v := map[string]interface{}{ "name": "SuperWang", "location": "Beijing", "age": 28, "Likes": []string{"Movie", "Football"}, } if err := fb.Set(v); err != nil { log.Fatal(err) } //get data from firebase var v_read map[string]interface{} if err := fb.Value(&v_read); err != nil { // handle err } fmt.Printf("%s\n", v_read) }

輸出:map[Likes:[Movie Football] age:%!s(float64=28) location:Beijing name:SuperWang]

監聽某個資料變化

package main

import "log"
import "github.com/zabawaba99/firego"

func main() {
    fb := firego.New("https://dabaojian-bcb26.firebaseio.com/Likes/0", nil)
    notifications := make(chan firego.Event)
    if err := fb.Watch(notifications); err != nil {
        log.Fatal(err)
    }

    for event := range notifications {
        log.Println("Event Received")
        log.Printf("Type: %s\n", event.Type)
        log.Printf("Path: %s\n", event.Path)
        log.Printf("Data: %v\n", event.Data)
        if event.Type == firego.EventTypeError {
            log.Print("Error occurred, loop ending")
        }
    }
}

在修改了某個值後,得到的輸出:
2017/10/13 12:00:14 Event Received
2017/10/13 12:00:15 Type: put
2017/10/13 12:00:15 Path: /
2017/10/13 12:00:15 Data: AV
2017/10/13 12:00:27 Event Received
2017/10/13 12:00:27 Type: put
2017/10/13 12:00:27 Path: /
2017/10/13 12:00:27 Data: AV3

停止監聽

fb := firego.New("https://someapp.firebaseio.com/some/value", nil)
    notifications := make(chan firego.Event)
    if err := fb.Watch(notifications); err != nil {
        log.Fatal(err)
    }

    go func() {
        for range notifications {
        }
        log.Println("Channel closed")
    }()
    time.Sleep(10 * time.Millisecond) // let go routine start

    fb.StopWatching()

這裡寫圖片描述