| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 | // 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()}// IsStandard reports whether the App Engine app is running in the standard// environment. This includes both the first generation runtimes (<= Go 1.9)// and the second generation runtimes (>= Go 1.11).func IsStandard() bool {	return internal.IsStandard()}// IsFlex reports whether the App Engine app is running in the flexible environment.func IsFlex() bool {	return internal.IsFlex()}// IsAppEngine reports whether the App Engine app is running on App Engine, in either// the standard or flexible environment.func IsAppEngine() bool {	return internal.IsAppEngine()}// IsSecondGen reports whether the App Engine app is running on the second generation// runtimes (>= Go 1.11).func IsSecondGen() bool {	return internal.IsSecondGen()}// 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)}
 |