Golang-Entwicklung – Erste Schritte mit Beego

Beego ist ein Open-Source-Framework, das auf der Go-Sprache zum Erstellen von Webanwendungen und APIs basiert. Es übernimmt einige gängige Entwurfsmuster, um die Entwicklungseffizienz, die Wartbarkeit des Codes und die Skalierbarkeit zu verbessern.

1. MVC-Entwurfsmuster

Das Beego-Framework übernimmt das klassische MVC-Entwurfsmuster (Model-View-Controller) und unterteilt die Anwendung in drei Hauptkomponenten: Modell, Ansicht und Controller. Das Folgende ist die Funktion jedes Moduls in Beego und eine einfache Demonstration:

Modell:

Das Modell ist hauptsächlich für die Daten- und Geschäftslogik verantwortlich. In Beego interagieren Modelle normalerweise mit der Datenbank. Beego verwendet standardmäßig ORM (Object Relational Mapping), um Strukturen Datenbanktabellen zuzuordnen und so Datenbankoperationen zu vereinfachen.

Sicht:

Ansichten sind für die Anzeige der Benutzeroberfläche verantwortlich. In Webanwendungen sind Ansichten normalerweise HTML-Seiten. Beego verwendet die Template-Engine von Go, um Seiten im Controller einfach zu rendern und anzuzeigen.

Regler:

Controller sind für die Bearbeitung von Benutzeranfragen und die Koordinierung der Interaktionen zwischen Modellen und Ansichten verantwortlich. In Beego ist ein Controller normalerweise eine Struktur, die eine Reihe von Methoden zur Verarbeitung von Anfragen enthält.

Hier ist ein einfaches Beispiel, das das MVC-Muster in Beego demonstriert:

// models/user.go

package models

import (
	"github.com/astaxie/beego/orm"
)

type User struct {
	Id       int
	Username string `orm:"unique"`
	Password string
}

func init() {
	orm.RegisterModel(new(User))
}

// Controller/user.go

package controllers

import (
	"github.com/astaxie/beego"
	"github.com/your_username/your_project/models"
)

type UserController struct {
	beego.Controller
}

// 注册页面
func (c *UserController) ShowRegister() {
	c.TplName = "register.tpl"
}

// 注册处理
func (c *UserController) DoRegister() {
	username := c.GetString("username")
	password := c.GetString("password")

	user := models.User{
		Username: username,
		Password: password,
	}

	_, err := models.AddUser(&user)
	if err != nil {
		c.Ctx.WriteString("注册失败:" + err.Error())
		return
	}

	c.Ctx.WriteString("注册成功")
}

//Dateiansichten/register.tpl anzeigen

{
   
   {extend "layout.tpl"}}

{
   
   {block "content"}}
<h2>用户注册</h2>
<form action="/user/register" method="post">
	<label>用户名: <input type="text" name="username"></label><br>
	<label>密码: <input type="password" name="password"></label><br>
	<input type="submit" value="注册">
</form>
{
   
   {end}}

// main.go

Paket main

import (
	"github.com/astaxie/beego"
	_ "github.com/your_username/your_project/models"
	_ "github.com/your_username/your_project/routers"
)

func main() {
	beego.Run()
}

In diesem Beispiel enthält das Models-Paket das User-Modell und das Controllers-Paket den UserController-Controller. Die ShowRegister-Methode wird verwendet, um die Benutzerregistrierungsseite anzuzeigen, und die DoRegister-Methode wird verwendet, um Benutzerregistrierungsanfragen zu verarbeiten. register.tpl im Verzeichnis „views“ ist die Vorlagendatei für die Registrierungsseite.

2. Routing-Mechanismus

1. Grundlegende Routing-Regeln:
In Beego können Sie die Funktion beego.Router verwenden, um Routing-Regeln zu definieren. Die einfachsten Routing-Regeln bestehen aus HTTP-Methoden, URLs und Verarbeitungsfunktionen.
// main.go

package main

import (
	"github.com/astaxie/beego"
)

func main() {
	// 定义路由规则
	beego.Router("/", &MainController{})
	beego.Router("/user/:id", &UserController{}, "get:GetUser")
	beego.Run()
}

// controllers/main_controller.go
package controllers

import "github.com/astaxie/beego"

type MainController struct {
	beego.Controller
}

func (c *MainController) Get() {
	c.Ctx.WriteString("Hello, world!")
}

// controllers/user_controller.go
package controllers

import "github.com/astaxie/beego"

type UserController struct {
	beego.Controller
}

func (c *UserController) GetUser() {
	id := c.Ctx.Input.Param(":id")
	c.Ctx.WriteString("User ID: " + id)
}

Im obigen Beispiel wird die Funktion beego.Router verwendet, um Routing-Regeln zu definieren. „/“ stellt den Stammpfad dar, der der Get-Methode in MainController zugeordnet ist. „/user/:id“ stellt einen Pfad mit Parametern dar, die der GetUser-Methode in UserController zugeordnet sind. Parameter können in der Form :id definiert und dann über c.Ctx.Input.Param(“:id”) abgerufen werden.

2. Mehrere Anforderungsmethoden:
Mit Beego können Sie mehrere Verarbeitungsfunktionen für dieselbe URL definieren und verschiedene Anforderungsmethoden angeben. Dies wird durch die Verwendung von Semikolons in Routing-Regeln erreicht, um verschiedene Anforderungsmethoden zu trennen.

beego.Router("/user", &UserController{}, "get:GetAllUsers;post:CreateUser")

Im obigen Beispiel kann der Pfad „/user“ sowohl GET- als auch POST-Anfragen verarbeiten. Die GetAllUsers-Methode und die CreateUser-Methode verarbeiten diese beiden Anforderungen.

3. Reguläres Routing:
Beego unterstützt das Routing regulärer Ausdrücke und reguläre Ausdrücke können in Routing-Regeln verwendet werden.

beego.Router("/user/:username([\\w]+)", &UserController{}, "get:GetUserByUsername")

Im obigen Beispiel gibt :username([\w]+) in der Routing-Regel an, dass der Parameter username aus Buchstaben, Zahlen und Unterstrichen besteht.

4. Automatisches Routing:
Beego unterstützt auch automatisches Routing, das automatisch Routing-Regeln basierend auf der Namenskonvention des Controllers generiert. Wenn Sie beispielsweise einen UserController haben, generiert Beego automatisch die Route /user.

5. Annotations-Routing:
Beego unterstützt die Verwendung von Annotationen zum Definieren von Routen. Sie können die @router-Annotation für die Controller-Methode verwenden.

// Controller/user_controller.go

package controllers

import "github.com/astaxie/beego"

type UserController struct {
	beego.Controller
}

// @router /user/:id [get]
func (c *UserController) GetUser() {
	id := c.Ctx.Input.Param(":id")
	c.Ctx.WriteString("User ID: " + id)
}

Das Obige sind nur einige Grundkonzepte des Beego-Routing-Mechanismus. Tatsächlich bietet Beego auch weitere Funktionen, wie Routing-Gruppen, benutzerdefinierte reguläre Ausdrücke, Namespace usw. Eine detaillierte Routing-Dokumentation finden Sie in der offiziellen Beego-Dokumentation: Beego Routing.

Guess you like

Origin blog.csdn.net/liulanba/article/details/135119990