123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- // Copyright 2011 Google Inc. All rights reserved.
- // Use of this source code is governed by the Apache 2.0
- // license that can be found in the LICENSE file.
- // Package appengine provides basic functionality for Google App Engine.
- //
- // For more information on how to write Go apps for Google App Engine, see:
- // https://cloud.google.com/appengine/docs/go/
- package appengine // import "google.golang.org/appengine"
- import (
- "net/http"
- "github.com/golang/protobuf/proto"
- "golang.org/x/net/context"
- "google.golang.org/appengine/internal"
- )
- // The gophers party all night; the rabbits provide the beats.
- // Main is the principal entry point for an app running in App Engine.
- //
- // On App Engine Flexible it installs a trivial health checker if one isn't
- // already registered, and starts listening on port 8080 (overridden by the
- // $PORT environment variable).
- //
- // See https://cloud.google.com/appengine/docs/flexible/custom-runtimes#health_check_requests
- // for details on how to do your own health checking.
- //
- // On App Engine Standard it ensures the server has started and is prepared to
- // receive requests.
- //
- // Main never returns.
- //
- // Main is designed so that the app's main package looks like this:
- //
- // package main
- //
- // import (
- // "google.golang.org/appengine"
- //
- // _ "myapp/package0"
- // _ "myapp/package1"
- // )
- //
- // func main() {
- // appengine.Main()
- // }
- //
- // The "myapp/packageX" packages are expected to register HTTP handlers
- // in their init functions.
- func Main() {
- internal.Main()
- }
- // IsDevAppServer reports whether the App Engine app is running in the
- // development App Server.
- func IsDevAppServer() bool {
- return internal.IsDevAppServer()
- }
- // NewContext returns a context for an in-flight HTTP request.
- // This function is cheap.
- func NewContext(req *http.Request) context.Context {
- return internal.ReqContext(req)
- }
- // WithContext returns a copy of the parent context
- // and associates it with an in-flight HTTP request.
- // This function is cheap.
- func WithContext(parent context.Context, req *http.Request) context.Context {
- return internal.WithContext(parent, req)
- }
- // TODO(dsymonds): Add a Call function here? Otherwise other packages can't access internal.Call.
- // BlobKey is a key for a blobstore blob.
- //
- // Conceptually, this type belongs in the blobstore package, but it lives in
- // the appengine package to avoid a circular dependency: blobstore depends on
- // datastore, and datastore needs to refer to the BlobKey type.
- type BlobKey string
- // GeoPoint represents a location as latitude/longitude in degrees.
- type GeoPoint struct {
- Lat, Lng float64
- }
- // Valid returns whether a GeoPoint is within [-90, 90] latitude and [-180, 180] longitude.
- func (g GeoPoint) Valid() bool {
- return -90 <= g.Lat && g.Lat <= 90 && -180 <= g.Lng && g.Lng <= 180
- }
- // APICallFunc defines a function type for handling an API call.
- // See WithCallOverride.
- type APICallFunc func(ctx context.Context, service, method string, in, out proto.Message) error
- // WithAPICallFunc returns a copy of the parent context
- // that will cause API calls to invoke f instead of their normal operation.
- //
- // This is intended for advanced users only.
- func WithAPICallFunc(ctx context.Context, f APICallFunc) context.Context {
- return internal.WithCallOverride(ctx, internal.CallOverrideFunc(f))
- }
- // APICall performs an API call.
- //
- // This is not intended for general use; it is exported for use in conjunction
- // with WithAPICallFunc.
- func APICall(ctx context.Context, service, method string, in, out proto.Message) error {
- return internal.Call(ctx, service, method, in, out)
- }
|