3

私は初めてGoogleGOをいじくり回しています。「helloworld」アプリケーションを拡張して、initセクションでパスを定義しようとしました。これが私がこれまでにしたことです:

package hello

import (
    "fmt"
    "net/http"
)

func init() {
    http.HandleFunc("/service", serviceHandler)
    http.HandleFunc("/site", siteHandler)
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "Hello, there")
}

func serviceHandler( w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "this is Services")
}

func siteHandler( w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "this is Sites")
}

コールバックのみがhandler()実行され、他は無視されます。例:http://myserver/service/foo印刷しHello, thereます。私はそれがそうなることを望んでいましたthis is Services

サービスルーティングを行うためのより良い方法はありますか?理想的には、これらはとにかく別々のスクリプトであると思いますが、app.yamlが_go_appスクリプト宣言で特別な文字列を必要とするという事実に基づいて、Goにはスクリプトが1つしかないように見えます。

ありがとう!

4

1 に答える 1

6

次のドキュメントによると:http://golang.org/pkg/net/http/#ServeMux

末尾にスラッシュがないパス仕様は、そのパスに正確に一致するだけです。このように最後にスラッシュを追加すると、http.HandleFunc("/service/", serviceHandler)期待どおりに機能します。

于 2012-09-06T18:51:04.697 に答える