从Django迁移到Golang:新手入门建议
从Django迁移到Golang:新手入门建议 大家好,
我从事 Django 开发已有两年,最近开始对 Go 产生兴趣,特别是用于快速构建 Web 应用。 我的问题是,是否有任何与 Django 类似或等效的 Go Web 框架,有助于快速构建 Web 应用? 如果有,我很乐意获得相关的参考信息。 谢谢。
感谢您的回答。目前我使用 Django 的模板来创建多页面应用,但我知道 REST API 才是正确的方向。
谢谢。
更多关于从Django迁移到Golang:新手入门建议的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Go 也使用模板(请参阅 Templates - Go Web Examples 和 template package - html/template - pkg.go.dev)。
看看这个类似Django(全栈)的框架列表,
A curated list of awesome Go frameworks, libraries and software - Awesome Go
一份精心整理的 #Golang 框架、库和软件列表
有一些更知名的框架,比如 Buffalo、Beego、Gin,但我从未使用过。
很遗憾,我对Django不太熟悉,因此在提供类似的范式建议方面可能帮不上太多忙。不过,这里有一份关于Web应用程序的很好的入门指南:
该指南使用了 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: 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/http和html/template已足够处理许多Web需求。
这些框架和工具能帮助你平滑过渡到Go的Web开发。



