使用 Gobot.io 和 sleepy RESTful Framework for Go 执行 SparkCore 函数

Execute SparkCore function using Gobot.io and sleepy RESTful Framework for Go

我有以下代码,我在其中使用名为 sleepy.

的 RESTful Go 框架

我可以成功启动服务:http://localhost:3000, however when I try to access http://localhost:3000/temperature I'm expecting my SparkCore函数dht执行。

我正在使用我在自己的代码中实现的 Gobot.io Spark platform to execute this function based on this example

问题是代码没有通过 Get() 函数中的 gobot.Start() 方法,所以我实际上无法 return result 数据。

我正在设置 data 值,希望我能做到:

return 200, data, http.Header{"Content-type": {"application/json"}}

但它永远不会被调用,因为 gobot.Start()

我是 Go 的新手,非常感谢任何帮助。

package main

import (
    "net/url"
    "net/http"
    "fmt"
    "github.com/dougblack/sleepy"
    "github.com/hybridgroup/gobot"
    "github.com/hybridgroup/gobot/platforms/spark"
)

var gbot = gobot.NewGobot()
var sparkCore = spark.NewSparkCoreAdaptor("spark", "device_id", "auth_token")

type Temperature struct {}
func (temperature Temperature) Get(values url.Values, headers http.Header) (int, interface{}, http.Header) {
    work := func() {
        if result, err := sparkCore.Function("dht", ""); err != nil {
            fmt.Println(err)
        } else {
            data := map[string]string{"Temperature": result}
            fmt.Println("result from \"dht\":", result)
        }
    }

    robot := gobot.NewRobot("spark",
        []gobot.Connection{sparkCore},
        work,
    )

    gbot.AddRobot(robot)
    gbot.Start()

    return 200, data, http.Header{"Content-type": {"application/json"}}
}

func main() {
    api := sleepy.NewAPI()

    temperatureResource := new(Temperature)
    api.AddResource(temperatureResource, "/temperature")

    fmt.Println("Listening on http://localhost:3000/")
    api.Start(3000)
}

gbot.Start() 是阻塞调用。

在此上下文中,您应将其称为:

go gbot.Start() 

这将在 goroutine(思考线程)中启动它,然后让您的应用继续。

当您查看 gobot example app 时,它们不会 运行 在后台运行,因为它是主要功能。如果 main 运行 一切都在后台并且不等待任何东西,应用程序会立即退出,没有明显的影响。