2015-03-25 26 views
2

我有以下代碼,我正在使用RESTful框架的Go,叫做sleepy使用Gobot.io和昏昏沉沉的RESTful Framework執行SparkCore函數

我可以成功啓動該服務:http://localhost:3000,但是當我嘗試訪問http://localhost:3000/temperature時,我期待我的SparkCore函數dht執行。

我正在使用Gobot.io Spark platform來執行此功能,它基於我在自己的代碼中實現的this example

問題是代碼沒有通過Get()函數中的gobot.Start()方法,所以我實際上不能返回result數據。

我設置data值希望我可以做:

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) 
} 

回答

2

gbot.Start()是一個阻塞呼叫。

在這種情況下,您預計稱其爲:

go gbot.Start() 

這將啓動它在一個夠程(認爲線程),然後讓你的應用程序繼續。

當你看着gobot example app,它們不會在後臺運行,因爲它是主要功能。如果main在後臺運行所有內容,並且沒有等待任何內容,則應用程序會立即退出並且沒有任何明顯效果。

+1

我的部分的排字錯誤,gbot.Start(),只是在阻止的行前添加單詞go ...更新答案 – 2015-03-26 02:36:07