使用Gobot.io和sleepyrestfulframeworkforgo执行SparkCore函数

使用Gobot.io和sleepyrestfulframeworkforgo执行SparkCore函数,rest,go,sparkcore,gobot.io,Rest,Go,Sparkcore,Gobot.io,下面是我使用RESTful框架来调用Go的代码 我可以在以下位置成功启动服务:,但是当我尝试访问时,我希望我的函数dht能够执行 我使用来执行这个函数,我已经在自己的代码中实现了 问题是代码没有通过get()函数中的gobot.Start()方法,因此我实际上无法返回结果数据 我正在设置数据值,希望可以执行以下操作: return 200, data, http.Header{"Content-type": {"application/json"}} 但由于gobot.Start(),它从未被

下面是我使用RESTful框架来调用Go的代码

我可以在以下位置成功启动服务:,但是当我尝试访问时,我希望我的函数
dht
能够执行

我使用来执行这个函数,我已经在自己的代码中实现了

问题是代码没有通过
get()
函数中的
gobot.Start()
方法,因此我实际上无法返回
结果
数据

我正在设置
数据
值,希望可以执行以下操作:

return 200, data, http.Header{"Content-type": {"application/json"}}
但由于
gobot.Start()
,它从未被调用

我是新来的,所以任何帮助都将不胜感激

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(思考线程)中启动它,然后让你的应用程序继续

当您查看时,它们不会在后台运行,因为它是主功能。如果main在后台运行所有操作,并且不等待任何操作,则应用程序会立即退出,而不会产生明显的效果。

我键入了gbot.Start(),只需在阻塞的行前面添加go一词即可。。。更新答案