从Django迁移到Golang:新手入门建议

从Django迁移到Golang:新手入门建议 大家好,

我从事 Django 开发已有两年,最近开始对 Go 产生兴趣,特别是用于快速构建 Web 应用。 我的问题是,是否有任何与 Django 类似或等效的 Go Web 框架,有助于快速构建 Web 应用? 如果有,我很乐意获得相关的参考信息。 谢谢。

7 回复

感谢您的回答。目前我使用 Django 的模板来创建多页面应用,但我知道 REST API 才是正确的方向。

谢谢。

更多关于从Django迁移到Golang:新手入门建议的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


看看这个类似Django(全栈)的框架列表,

Awesome Go

A curated list of awesome Go frameworks, libraries and software - Awesome Go

一份精心整理的 #Golang 框架、库和软件列表

有一些更知名的框架,比如 Buffalo、Beego、Gin,但我从未使用过。

Tal_Bar-Or:

我的问题是,是否有任何Go语言的Web框架与Django类似或等效。

我正试图避免使用框架。因为Go内置的工具已经足够好,而框架并不总是对你有帮助。我测试过Angular,发现Angular中的几乎所有功能在Go中都是内置的。模板和子模板功能有点像Angular,但要简单得多。我通过使用子模板创建了菜单和子菜单。所有这些都没有使用任何框架。创建导航

很遗憾,我对Django不太熟悉,因此在提供类似的范式建议方面可能帮不上太多忙。不过,这里有一份关于Web应用程序的很好的入门指南:

https://gowebexamples.com/

该指南使用了 gorilla/mux,这个库被广泛使用。我同时使用 gorilla/mux 和 julienschmidt/httprouter。官方文档也有一份仅使用标准库的入门指南:

https://golang.org/doc/articles/wiki/

我主要编写RESTful API,并且发现Go在这方面确实表现出色。你是在创建一个SPA + REST API,还是希望使用模板来创建一个多页面应用?

要编写Web应用程序,你必须首先决定是采用服务器端风格,还是将应用程序拆分为前端和后端。

在第一种情况下,你编写的每个HTTP处理程序都会返回一个填充了数据(来自数据库或其他来源)的模板。这些模板就是你的前端,应包含JS和CSS库及框架(例如AngularJS、Vue、Bootstrap等)。

在第二种情况下,HTTP处理程序是其他前端应用程序(用Angular、React等编写)的简单端点,并以众所周知的数据交换格式(如JSON)返回数据。

在这两种情况下,最好使用一个框架(例如gorilla toolkit),以避免在路由和子路由、中间件、cookie、会话等方面重复造轮子。

不过,可以看看我前段时间编写的这个服务器端应用程序骨架,也许会有帮助。

GitHub - geosoft1/ssas: Server side application skeleton for Go language

GitHub - geosoft1/ssas: Go语言的服务器端应用程序骨架

Go语言的服务器端应用程序骨架。通过在GitHub上创建账户为geosoft1/ssas的开发做出贡献。

在Go语言中,虽然没有与Django完全等效的全栈框架,但有几个框架提供了类似的高效开发体验,适合从Django迁移过来的开发者。以下是几个推荐的选择,附带示例代码说明:

1. Gin - 轻量级高性能框架

Gin以其简洁性和高性能著称,适合构建RESTful API和Web应用。它类似于Django的轻量级路由部分,但需要自行集成ORM等组件。

package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()
    r.GET("/", func(c *gin.Context) {
        c.JSON(200, gin.H{"message": "Hello from Gin!"})
    })
    r.Run(":8080")
}

2. Echo - 极简主义框架

Echo设计简洁,性能优秀,内置中间件支持,适合快速开发Web服务。

package main

import (
    "net/http"
    "github.com/labstack/echo/v4"
)

func main() {
    e := echo.New()
    e.GET("/", func(c echo.Context) error {
        return c.String(http.StatusOK, "Hello from Echo!")
    })
    e.Start(":8080")
}

3. Beego - 全栈式框架(最接近Django)

Beego是Go中最接近Django的全栈框架,内置ORM、会话管理、缓存等模块,提供类似Django的“开箱即用”体验。

package main

import "github.com/beego/beego/v2/server/web"

func main() {
    web.Router("/", &MainController{})
    web.Run()
}

type MainController struct {
    web.Controller
}

func (c *MainController) Get() {
    c.Ctx.WriteString("Hello from Beego!")
}

4. Fiber - 高性能框架

Fiber基于Express.js设计,语法类似,性能极高,适合需要高并发的场景。

package main

import "github.com/gofiber/fiber/v2"

func main() {
    app := fiber.New()
    app.Get("/", func(c *fiber.Ctx) error {
        return c.SendString("Hello from Fiber!")
    })
    app.Listen(":8080")
}

数据库集成(ORM)

Go中常用的ORM是GORM,它类似于Django的ORM,支持结构体映射和查询链式调用:

package main

import (
    "gorm.io/driver/sqlite"
    "gorm.io/gorm"
)

type User struct {
    gorm.Model
    Name string
}

func main() {
    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
    if err != nil {
        panic("Failed to connect database")
    }
    db.AutoMigrate(&User{})
    // 创建用户示例
    db.Create(&User{Name: "John"})
}

模板引擎

Go标准库内置html/template,类似于Django模板,可直接使用:

package main

import (
    "html/template"
    "net/http"
)

func main() {
    tmpl := template.Must(template.ParseFiles("index.html"))
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        data := struct{ Title string }{Title: "Go Web App"}
        tmpl.Execute(w, data)
    })
    http.ListenAndServe(":8080", nil)
}

建议

  • 从Gin或Echo开始:它们轻量且文档完善,适合快速上手。
  • 使用GORM处理数据:它提供了熟悉的ORM操作方式。
  • 结合标准库:Go的net/httphtml/template已足够处理许多Web需求。

这些框架和工具能帮助你平滑过渡到Go的Web开发。

回到顶部