post Image
appengineでcontextからとれるやつ

GAE/goでcontextの状態で設定を変えたりしたいとき、contextからどんな値がとれるのか覚えられないのでまとめておく

手順

以下のソースをappengineにデプロイ

main.go
package main

import (
    "encoding/json"
    "net/http"

    "fmt"

    "google.golang.org/appengine"
)

func init() {
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
    ctx := appengine.NewContext(r)

    v := map[string]interface{}{}

    v["AppID"] = appengine.AppID(ctx)
    v["Datacenter"] = appengine.Datacenter(ctx)
    v["DefaultVersionHostname"] = appengine.DefaultVersionHostname(ctx)
    v["Datacenter"] = appengine.Datacenter(ctx)
    v["ModuleName"] = appengine.ModuleName(ctx)
    v["RequestID"] = appengine.RequestID(ctx)
    v["VersionID"] = appengine.VersionID(ctx)
    v["ServerSoftware"] = appengine.ServerSoftware()
    v["InstanceID"] = appengine.InstanceID()

    b, err := json.Marshal(v)
    if err != nil {
        panic(err)
    }
    w.Header().Add("Content-Type", "text/json")
    fmt.Fprint(w, string(b))
}

app.yaml
application: go-context-value
runtime: go
api_version: go1

handlers:
- url: /.*
  script: _go_app

バージョンとモジュールの異なる4つをデプロイ

appcfg.py update app.yaml --version=v1
appcfg.py update app.yaml --version=v2
appcfg.py update app.yaml --version=v1 --module=alpha
appcfg.py update app.yaml --version=v2 --module=alpha

それぞれ下記のURLでアクセスできる

結果

Local(DevServer)

{
    AppID: "go-context-value",
    Datacenter: "us1",
    DefaultVersionHostname: "localhost:8080",
    InstanceID: "6e2f6aab2daacd4690a4e6384dbaaec766cc",
    ModuleName: "default",
    RequestID: "845267bffefaa2ebebfde06feecc5ad0c5bd5e6d3314e9ff3f2d3d6b",
    ServerSoftware: "Development/2.0",
    VersionID: "None.006708870953159683"
}

default/v1

{
    AppID: "go-context-value",
    Datacenter: "asia-northeast1-2",
    DefaultVersionHostname: "go-context-value.appspot.com",
    InstanceID: "00c61b117ccc63c0e384e2bc762d9ee30282eb404b36c8204ac745d1e0e3b11a2931b4aa214a",
    ModuleName: "default",
    RequestID: "58da6f5d00ff09e670dd51b37a0001627e676f2d636f6e746578742d76616c756500017631000100",
    ServerSoftware: "Google App Engine/1.9.48",
    VersionID: "v1.400159354593069450"
}

default/v2

{
    AppID: "go-context-value",
    Datacenter: "asia-northeast1-2",
    DefaultVersionHostname: "go-context-value.appspot.com",
    InstanceID: "00c61b117c6844863ea1dc5def9f25b6f6badbb9fbbf56f9e5ed137f5625cae1d301bb96b046",
    ModuleName: "default",
    RequestID: "58da705100ff078a3bb877727e0001627e676f2d636f6e746578742d76616c756500017632000100",
    ServerSoftware: "Google App Engine/1.9.48",
    VersionID: "v2.400159361566213064"
}

alpha/v1

{
    AppID: "go-context-value",
    Datacenter: "asia-northeast1-2",
    DefaultVersionHostname: "go-context-value.appspot.com",
    InstanceID: "00c61b117ce2b410febcef31d2133b26bcd61f334d76bfcd492029610939ac2a38aec2ddf62c",
    ModuleName: "alpha",
    RequestID:  "58da70e900ff064b9bd30603010001627e676f2d636f6e746578742d76616c75650001616c7068613a7631000100",
    ServerSoftware: "Google App Engine/1.9.48",
    VersionID: "v1.400159368970992289"
}

alpha/v2

{
    AppID: "go-context-value",
    Datacenter: "asia-northeast1-2",
    DefaultVersionHostname: "go-context-value.appspot.com",
    InstanceID: "00c61b117cdd25784ccb794cbcc97a015b1c2a3b7beea9a9609aa1d21fd60c47f190c6ee47a8",
    ModuleName: "alpha",
    RequestID:  "58da70fa00ff0b30792094b9960001627e676f2d636f6e746578742d76616c75650001616c7068613a7632000100",
    ServerSoftware: "Google App Engine/1.9.48",
    VersionID: "v2.400159617660363671"
}

まとめ

AppID

常にアプリケーション名(プロジェクトID)を返す。
アプリケーション名(プロジェクトID)はデプロイ時に必須なので必ず任意の値が入る。
ただしローカル環境でアプリケーション名(プロジェクトID)の指定がない場合は None

Datacenter

常に作成時のリージョンを返す

DefaultVersionHostname

バージョン、モジュールによらず常に基本となるホスト名を返す アプリケーションID.appspot.com

ModuleName

常に現在のモジュール名を返す。
指定がない場合は default

RequestID

リクエストに対し一意なIDを返す。

VersionID

現在のバージョンとデプロイ毎に変化するバージョン番号が結合した文字列を返す 現在のバージョン名.バージョン番号

バージョン名はデプロイ時に必須なので必ず任意の値が入る。
ただしローカル環境で指定しない場合は None


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。