• Keine Ergebnisse gefunden

Google App Engine und Go

N/A
N/A
Protected

Academic year: 2021

Aktie "Google App Engine und Go"

Copied!
20
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)
(2)

Google App Engine

und

Go

Michael Stapelberg

2012-05-25

powered by L

A

TEX

(3)

Inhalt

Übersicht: Google App Engine

Einführung in Go

Einführung in Google App Engine

(4)

Google App Engine

Platform as a Service (PaaS), genauer:

Plattform für Webapps

Skaliert automatisch mit der Anzahl an Requests

99.95% Uptime SLA

(4 Stunden Ausfall pro Jahr)

Apps in Python, Java oder Go;

eigene APIs

(5)

Vorteile

Konsistente APIs, gute Apps schnell umsetzbar

Keine Gedanken mehr an Hosting, Scaling, Capacity Planning, Monitoring, Security

verschwenden

(Nur?) soviel zahlen wie man wirklich nutzt

(6)

Nachteile

Vendor lock-in (FOSS-Alternativen existieren, aber…)

Nicht für alle Apps (gut) geeignet

(7)

Go

Programmiersprache, welche die Effizienz kompilierter Sprachen mit der Leichtigkeit dynamischer Sprachen vereinen will

Besonders gute Unterstützung für Concurrency

Schnelles Kompilieren, keine Makefiles

Garbage Collection

Unicode-Unterstützung, Arrays/Maps,

HTTP/JSON/Crypto/… in der stdlib

(8)

Hello World

package main import "fmt"

func main() {

fmt.Println("Hello, SEM")

}

(9)

Variablen/Typen

// Äquivalent (wegen type inference) var foo string = "ohai"

foo := "ohai"

// Array

weekdays := []string{"Mo", "Di"}

// Map

klausurpunkte := make(map[string]int)

klausurpunkte["Michael Stapelberg"] = 0

klausurpunkte["Sven Schönung"] = 15

(10)

Zuweisungen

weekdays := []string{"Mo", "Di"}

for index, value := range(weekdays) {

fmt.Printf("Der %d. Wochentag ist %s\n", index, value) }

for _, value := range(weekdays) {

fmt.Printf("%s ist ein Wochentag\n", value)

}

(11)

Fehlerbehandlung

// Fehler prüfen und reagieren file, err := os.Open("funnycat.jpg") if err != nil {

fmt.Printf("Konnte Bild nicht öffnen: %v\n", err) os.Exit(1)

}

// Fehler ignorieren (gelegentlich sinnvoll)

file, _ := os.Open("funnycat.jpg")

(12)

Typen (Deklaration)

type SizeIndex struct { filename string

Index map[string]int64 }

var idx SizeIndex

idx.Index = make(map[string][]byte)

idx.Index["/home/michael/sem.pdf"] = 934821

(13)

Typen (Methoden)

func (idx *SizeIndex) Save() error { file, err := os.Open(idx.filename) if err != nil {

return err }

defer file.Close()

encoder := gob.NewEncoder(file)

if err := encoder.Encode(idx); err != nil { return err

}

return nil

}

(14)

Goroutinen

func IsReady(what string, duration time.Duration) { time.Sleep(duration)

fmt.Printf("%s is ready!\n", what) }

func main() {

go IsReady("tea", 6 * time.Second) go IsReady("coffee", 2 * time.Second) fmt.Println("waiting…")

time.Sleep(10 * time.Second)

}

(15)

Channels

func cacheFlusher(cacheChan chan string) { for {

select {

case url := <-cacheChan:

fmt.Printf("read URL %s\n", url) case <-time.After(10 * time.Second):

fmt.Println("writing cache to disk") }

} }

cacheChan := make(chan string) go cacheFlusher(cacheChan) for {

fmt.Scanf("%s", &input)

cacheChan <- input

}

(16)

Beispiel: Website-Download mit Timeout

result := make(chan *http.Response, 1) go func() {

resp, _ := http.Get("http://www.hs-mannheim.de/") result <- resp

}()

go func() {

time.Sleep(5 * time.Second) result <- nil

}()

if resp := <-result; resp != nil {

fmt.Printf("HTTP %d\n", resp.StatusCode)

}

(17)

Google App Engine

(18)

Dateistruktur einer App

app.yaml follow.html overview.html js

- kinetic-v3.9.5.min.js wham

- follow.go

- newpresentation.go - overview.go

- slide.go

- wham.go

(19)

app.yaml

application: whamdemo version: 1

runtime: go api_version: go1 handlers:

- url: /js static_dir: js - url: /.*

script: _go_app login: required

- url: /presentation/unpack script: _go_app

login: admin

(20)

Quellen/Links

http://en.wikipedia.org/wiki/Google_AppEngine

http:

//en.wikipedia.org/wiki/Go_(programming_language)

http://www.golang.org/

http://tour.golang.org/ (bzw. http://play.golang.org/

Referenzen

ÄHNLICHE DOKUMENTE

It must provide at the very least heap and GC metrics (e.g., memory usage, GC pause times, and allocations) as well as sampled CPU data compatible with Dynatrace.. Also, the

By assisting in building cyber capacities, donor countries contribute to creating a safe and stable cyberspace, which in return can allow for social and economic development for

The EU will also work towards closing the digital divide, and will actively participate in international efforts to build cyber security capacity.’ On this last point

Eine rechtsgültige Einwilligung liegt vor, wenn der betroffene Sportler in die Verarbeitung der personenbezogenen Daten für den festgelegten Zweck ausdrücklich,

Vors.: Anneliese Franz, geb. November, 15 Uhr, Treffen im Vereinshaus, I. Stock in Erbach. Manfred Seidenberg zeigt seinen Videofüm „Herbst inMasuren. Gäste sind zu diesem

Die Christen wurden, wie auch Jesus selbst, verfolgt, festgenommen und teilweise getötet. Men- schen starben, weil sie von Jesus begeistert waren. Trotzdem hörten die Christen

Eine kürzlich veröffentlichte Studie* zeigt auf, dass sich nach einer Aufnahme von ca.. 10 g essentiellen Aminosäuren mit der Nahrung die Muskelproteinsynthese unter

Nach dem GKV-Wettbewerbsstärkungsge- setz von 2007 kann eine Kranken- kasse die Zuzahlung für solche Arz- neimittel um die Hälfte reduzieren oder ganz erlassen, für die durch