Blog

Go Buffalo - Schnelle Webentwicklung

Dennis Vriend

Aktualisiert Oktober 21, 2025
4 Minuten

Wenn Sie einen Restdienst oder eine Webanwendung in Go erstellen möchten, müssen Sie eine Menge Arbeit in Bezug auf die Projekteinrichtung, Anwendungsarchitektur, Verzeichnisstrukturen und vieles mehr leisten. Was wäre, wenn es eine Webentwicklungsplattform gäbe, die vom Frontend (JavaScript, CSS) bis zum Backend (Datenbank, Routing) bereits alles enthält, um das Leben eines Go-Webentwicklers zu erleichtern. Nun, es gibt sie, und sie heißt Buffalo. Werfen wir einen Blick darauf!

Büffel

Buffalo ist eine Entwicklungsumgebung für Webanwendungen für Go, die von Ruby on Rails, dem Play Framework, Django und anderen Web-Frameworks für schnelle Anwendungen inspiriert ist. Buffalo nutzt das Gorilla-Toolkit, ein Web-Toolkit für Go.

Installieren Sie

Buffalo kann durch Eingabe von installiert werden:

# from source with sqlite3 support
go get -u -v -tags sqlite github.com/gobuffalo/buffalo/buffalo

# from source *without* sqlite3 support
go get -u -v github.com/gobuffalo/buffalo-plugins

# using homebrew
$ brew install gobuffalo/tap/buffalo

Nach der Installation sollten Sie die buffalo cli installiert haben:

$ buffalo version
INFO[0000] Buffalo version is: v0.13.7

EINE REST-API

Buffalo kann auch einfache REST-APIs erstellen. Buffalo v0.13.7 unterstützt keine Module, daher müssen Sie ein Verzeichnis im $GOPATH erstellen, z.B. $GOPATH/src/github.com/binxio/blog-go-buffalo und geben Sie Folgendes ein

$ buffalo new go_blog_buffalo --api --skip-pop
$ cd go_blog_buffalo
$ buffalo dev
buffalo: 2018/11/27 19:16:41 === Rebuild on: :start: ===
buffalo: 2018/11/27 19:16:41 === Running: go build -v -i -tags development -o tmp/go-buffalo-build  (PID: 17379) ===
buffalo: 2018/11/27 19:16:42 === Building Completed (PID: 17379) (Time: 1.322165735s) ===
buffalo: 2018/11/27 19:16:42 === Running: tmp/go-buffalo-build (PID: 17397) ===
INFO[2018-11-27T19:16:45+01:00] Starting application at 127.0.0.1:3000
INFO[2018-11-27T19:16:45+01:00] Starting Simple Background Worker

Der Dienst ist an Port '3000' verfügbar:

$ http :3000
HTTP/1.1 200 OK
Content-Length: 34
Content-Type: application/json
Date: Tue, 27 Nov 2018 18:17:36 GMT
Vary: Origin

{
    "message": "Welcome to Buffalo!"
}

Generator

Buffalo verfügt über einen Generator, der Aktionen erzeugen kann. Starten Sie ein zweites Terminal, navigieren Sie zu $GOPATH/src/github.com/binxio/blog-go-buffalo und geben Sie ein:

$ buffalo g a cats List --skip-template

Der Generator hat eine Datei cats.go mit der Aktion CatsList erstellt.
Ändern Sie die folgenden Zeilen in app.go:

// change this line
app.GET("/cats/List", CatsList)

// to this line
app.GET("/cats", CatsList)

Beachten Sie, dass Buffalo den Server automatisch kompiliert und neu lädt, um die Änderungen an der Anwendung zu berücksichtigen.
Lassen Sie uns den CatsList Handler in cats.go implementieren:

package actions

import "github.com/gobuffalo/buffalo"

type Cat struct {
    Name string json:"name"
    Age int json:"age"
}

var cats = []Cat {
    Cat { Name: "Elsa", Age: 16 },
    Cat { Name: "Tijger", Age: 12 },
}

// CatsList default implementation.
func CatsList(c buffalo.Context) error {
    return c.Render(200, r.JSON(cats))
}

Rufen Sie den Endpunkt auf:

$ http :3000/cats
HTTP/1.1 200 OK
Content-Length: 54
Content-Type: application/json
Date: Tue, 27 Nov 2018 18:42:38 GMT
Vary: Origin

[
    {
        "age": 16,
        "name": "Elsa"
    },
    {
        "age": 12,
        "name": "Tijger"
    }
]

Fügen wir mit dem Befehl eine neue Route hinzu:

$ buffalo g a cats GetById --skip-template

Ändern Sie die folgenden Zeilen in app.go:

// change this line
app.GET("/cats/GetById", CatsGetByID)

// to this line
app.GET("/cats/{id:[0-9]+}", CatsGetByID)

Fügen Sie die folgende Implementierung zu cats.go hinzu:

package actions

import (
    "github.com/gobuffalo/buffalo"
    "github.com/gorilla/mux"
    "net/http"
    "strconv"
)

type Cat struct {
    ID int json:"id"
    Name string json:"name"
    Age  int    json:"age"
}

var cats = []Cat{
    Cat{ID: 1, Name: "Elsa", Age: 16},
    Cat{ID: 2, Name: "Tijger", Age: 12},
}

func CatsList(c buffalo.Context) error {
    return c.Render(http.StatusOK, r.JSON(cats))
}

func CatsGetByID(c buffalo.Context) error {
    params := mux.Vars(c.Request())
    id, _ := strconv.Atoi(params["id"])
    for _, cat := range cats {
        if cat.ID == id {
            return c.Render(http.StatusOK, r.JSON(cat))
        }
    }
    return c.Render(http.StatusNotFound, nil)
}

Und rufen Sie den Endpunkt auf:

$ http :3000/cats/1
HTTP/1.1 200 OK
Content-Length: 32
Content-Type: application/json
Date: Tue, 27 Nov 2018 18:51:09 GMT
Vary: Origin

{
    "age": 16,
    "id": 1,
    "name": "Elsa"
}

Fazit

Mit Buffalo ist es wirklich einfach, Rest Services zu erstellen. Buffalo erstellt ein Projekt-Skelett, generiert Aktionen und Vorlagen, führt den Server aus und bietet Hot Reload bei Codeänderungen. Wir haben zwei Aktionen erstellt, eine für Katzen und eine, um eine Katze anhand ihrer ID zu finden. Buffalo nutzt das Gorilla-Toolkit, was es uns leicht macht, den REST-Dienst mit Funktionen zu erweitern. Ich werde Buffalo auf jeden Fall für ein nächstes Projekt verwenden.


Tags:

Verfasst von

Dennis Vriend

Contact

Let’s discuss how we can support your journey.