I would like to develop application with Goji and Google App Engine/Go.
I copied and pasted sample code from https://github.com/zenazn/goji and changed func name from "main" to "init".
package main
import (
"fmt"
"net/http"
"github.com/zenazn/goji"
"github.com/zenazn/goji/web"
)
func hello(c web.C, w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, %s!", c.URLParams["name"])
}
func init() {
goji.Get("/hello/:name", hello)
goji.Serve()
}
and Run this application
# goapp serve
but this application says
bad runtime process port ['']
2014/06/01 08:35:30.125553 listen tcp :8000: bind: address already in use
How can I use Goji with GAE/Go? Or I cannot use Goji with GAE/Go?
init
functions are special, in that they're run automatically to initialize modules. By serving you app in an init function, you've stopped the initialization of your code mid-way (because goji.Serve
never terminates). Probably what's happening is that something depends on runtime flags, and you're running before they're parsed.
What you can do is write a single app engine handler that forwards the serving the goji.DefaultMux
. I've not tested it, but something like this should work:
import (
"fmt"
"github.com/zenazn/goji"
"net/http"
)
func init() {
http.Handle("/", goji.DefaultMux)
... Register your goji handlers here
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With