2

次のコードでは、 sleepyという Go 用の RESTful フレームワークを使用しています。

http://localhost:3000でサービスを正常に開始できますが、 http://localhost:3000/temperatureにアクセスしようとすると、 SparkCore関数dhtが実行されることを期待しています。

Gobot.io Spark プラットフォームを使用して、独自のコードに実装したこの例に基づいてこの関数を実行しています。

gobot.Start()問題は、コードが関数内のメソッドを通過しないため、Get()実際に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)
}
4

1 に答える 1

2

gbot.Start()ブロッキングコールです。

このコンテキストでは、次のように呼び出すことが期待されます。

go gbot.Start() 

これにより、ゴルーチン (スレッドと考えてください) で起動され、アプリが続行されます。

gobot example appを見ると、それが主な機能であるため、バックグラウンドで実行されません。メインがバックグラウンドですべてを実行し、何も待機しない場合、アプリはすぐに終了し、明らかな影響はありません。

于 2015-03-25T11:42:16.430 に答える