使用Gobot.io和sleepyrestfulframeworkforgo执行SparkCore函数
下面是我使用RESTful框架来调用Go的代码 我可以在以下位置成功启动服务:,但是当我尝试访问时,我希望我的函数使用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(),它从未被
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一词即可。。。更新答案