Golang有哪些类似Python中Django的Web框架选择

Golang有哪些类似Python中Django的Web框架选择 各位 Gopher 们好,

我过去大量使用过 Python 的 Web 框架 Django。然而,我逐渐认为 Python 可能并非 Web 框架的理想选择。

因此,我开始着手创建自己的框架,旨在提供一个类似于 Django 的、用于后端开发的坚实起点,但使用 Go 语言。

目前,我正在考虑是保留这个框架供个人使用,还是投入更多精力将其开源。这可能会让 Go 语言在 Web 框架和无头 CMS 领域获得更多关注。

问题 1: 你能推荐其他 Go Web 框架吗?到目前为止,我看过 Gin、Echo、Beego 和 Fiber。

问题 2: 你在一个 Web 框架中寻找哪些功能?

问题 3: 以下是我的初步功能列表。我是否遗漏了什么?

  • 非常直观且易于编写的代码。
  • 用户管理系统
  • 权限管理系统
  • 用户和权限数据的缓存
  • 管理仪表板
  • 通过 CSV 上传批量创建用户。
  • 为超级用户提供可选的二次验证
  • 内置数据库迁移。
  • 简化的部署流程(通过 SSH bash 脚本利用 Docker Compose 部署 NGINX、Go、PostgreSQL)
  • 我计划让 NGINX 处理静态文件,因为它在这方面做得很好。
  • 不提供传统的文档,计划是提供一份手册和一本“食谱”,目标是代码本身具有自解释性,并辅以注释。
  • 包含通过外部 API 集成发送邮件的功能,连接到开发者选择的商业服务。
  • 备份系统,用于将持久化数据离线保存,并能重新迁移回应用。

问题 4: 你觉得这个项目有吸引力吗?你认为 Go 社区对此有需求吗?


更多关于Golang有哪些类似Python中Django的Web框架选择的实战教程也可以访问 https://www.itying.com/category-94-b0.html

11 回复

最终,最佳选择取决于您项目的需求和偏好。请考虑诸如复杂性、提供的功能以及社区支持等因素。

更多关于Golang有哪些类似Python中Django的Web框架选择的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你好 Karl, 我是这个社区的新成员,你的想法非常吸引人,我很乐意贡献一份力量。

强烈建议你开源你的代码,这样会有更多的Gopher加入,使其发展非常迅速。你可以从你的想法或概念以及简单的结构开始。

如果你计划将项目开源,那为什么不这么做呢?一旦分享出来,你将获得宝贵的反馈。在没有看到产品的情况下,很难提供任何反馈。像 beego 这样的项目表明,大型框架在特定领域肯定是有需求的。

感谢您的意见。开发进展非常顺利。我计划在五月一日(如果在此之前没有接到其他工作的话)或者五月四日发布,原因嘛 ;)

wink

有两个项目似乎至少获得了一些关注,并且彼此相关,它们是:

NGINX 运行得非常完美。我不会放弃这个高效的软件。相反,我会拥抱它。让它来服务你的静态文件。

我已经尝试过 HTMX,但感觉它有些笨重。我用几行原生 JavaScript 就替换了它。说实话,对我来说,使用一个在 DOM 加载时触发的脚本,结合 Go 语言的 {{baseUrl}} 字符串替换,效果反而更好。只需将你的认证令牌存储在浏览器存储中,并在请求时发送它。因此,我决定不将 HTMX 作为项目本身的一部分,但如果用户愿意,他们当然可以自行引入。

“不幸的是” :innocent: 我手头有一些付费工作需要处理,所以我希望能在 01.05 之前准备好。

框架的开发已完成约80%,预计将在接下来的1-3周内完成,具体取决于我的工作量和天气情况!😎

我正在寻求一些帮助来进行快速测试。如果您本周末有空,并且对代码审查感兴趣,我将非常感谢您的帮助。

理想的候选人应具备使用其他框架和搭建Linux服务器的经验,熟悉典型的流程和挑战。

您应精通Go代码审查,并准备好提供建设性的书面反馈。

该框架设计为自文档化;文档由应用程序进行服务器端渲染。管理仪表板是一个渐进式Web应用,由应用程序提供服务,并包含CSR端点。这种设置为实际使用提供了一个很好的示例,可能非常有益。

发布前剩余的任务包括测试、收集反馈、完善文档、优化CSS以提升美观度、处理许可证等法律事宜,以及进行更多现场测试。

如果您不仅想抢先预览,还希望参与贡献(主要是提供书面反馈),请随时私信我。

你好 @Karl 你能推荐其他 Go Web 框架吗?

GoFr - 一个固执己见的 Go 框架

用于加速微服务开发

GoFr - GitHub - gofr-dev/gofr: 一个固执己见的 Go 框架,用于加速微服务开发

你在 Web 框架中寻找哪些功能?

  1. 易于编写代码
  2. 提供抽象以加速冗余任务。

以下是我的初步功能列表。我是否遗漏了什么? 我怀疑所有这些功能是否都会出现在任何一个框架中,因为用户管理、权限管理似乎是业务逻辑的一部分。 每个应用程序对于允许谁做什么、不允许做什么,都会有自己的一套方式。 但是,是的,

根据你的列表,gofr 提供了以下功能 🙂

  1. 非常直接且易于编写的代码
  2. 内置数据库迁移。
  3. 简化的部署过程(为 Kubernetes 存活性和就绪性探测提供端点)
  4. 计划提供手册和烹饪书,而非传统文档,旨在实现代码自解释并辅以注释。
  5. 可观测性

你觉得这个项目有吸引力吗?你认为 Go 社区对此有需求吗? 是的,据我所知,这是从概念验证到生产环境最快的方式 -

GoFr - 一个固执己见的 Go 框架

此外,如果谈论微服务,你不需要匹配响应格式,因为它对此有标准格式。

大家好!

听说你正在用Go语言创建一个Web框架,这真是令人兴奋。以下是对你问题的回应:

问题1: 你已经研究过一些流行的Go Web框架,如Gin、Echo、Beego和Fiber,这是一个很好的开始。这些框架各有优缺点,进一步探索它们可以帮助你了解哪些特性对你和你的项目是重要的。

问题2: 许多开发者在选择Web框架时看重的特性包括:

  • 性能和可扩展性
  • 易用性和简洁性
  • 良好的文档和社区支持
  • 灵活性和可扩展性
  • 内置的安全特性
  • 与其他工具和服务的集成能力
  • 对并发和异步任务的有效处理

问题3: 你的初步功能列表看起来非常全面,涵盖了一个健壮Web框架的许多方面。你可能还需要考虑一些额外的特性:

  • 用于处理常见任务(如身份验证、日志记录和请求/响应操作)的中间件支持
  • 对WebSocket和实时通信的支持
  • 内置的测试工具和框架
  • 国际化和本地化支持
  • 对RESTful API和GraphQL的内置支持
  • 自动生成API文档

问题4: 关于你的项目在Go社区的吸引力和需求,在不了解更多关于你框架的具体细节以及它相较于现有解决方案带来的独特价值的情况下,很难预测。然而,如果你的框架专注于简洁性、性能和易用性,同时提供用户管理、权限和部署自动化等有价值的功能,那么在寻求可靠高效Go Web框架的开发者中,确实可能存在需求。

关于Go Web框架选择的专业分析

问题1:推荐的Go Web框架

除了你提到的框架,以下是Go生态中值得考虑的Web框架:

  1. 标准库net/http - 轻量级,适合构建定制化框架基础
  2. Chi - 轻量级路由框架,中间件生态丰富
  3. Gorilla - 模块化工具集(mux, sessions, websocket等)
  4. Buffalo - 全栈框架,最接近Django的"包含电池"理念
  5. Iris - 高性能,功能全面
  6. Kratos - 微服务框架,来自B站

示例:使用Chi构建基础路由

package main

import (
    "net/http"
    "github.com/go-chi/chi/v5"
    "github.com/go-chi/chi/v5/middleware"
)

func main() {
    r := chi.NewRouter()
    r.Use(middleware.Logger)
    
    r.Get("/", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("Hello World"))
    })
    
    http.ListenAndServe(":3000", r)
}

问题2:Web框架关键功能需求

从Django迁移到Go时,我关注的核心功能:

  1. ORM/数据库抽象层 - 类似Django ORM的声明式模型
  2. 认证授权系统 - 开箱即用的用户会话、权限管理
  3. 管理后台 - 自动生成的管理界面
  4. 表单处理 - 数据验证和CSRF保护
  5. 模板引擎 - 服务端渲染支持
  6. 中间件生态系统 - 可插拔的请求处理链
  7. 迁移工具 - 数据库版本管理
  8. 测试工具 - 集成测试支持

问题3:功能列表补充建议

你的列表很全面,建议补充:

  1. RESTful API支持 - OpenAPI/Swagger集成
  2. WebSocket支持 - 实时功能
  3. 任务队列 - 异步任务处理(类似Celery)
  4. 缓存抽象层 - 支持Redis/Memcached
  5. 国际化(i18n) - 多语言支持
  6. 健康检查端点 - 部署监控
  7. 配置管理 - 环境变量、配置文件支持
  8. 日志系统 - 结构化日志记录

示例:用户认证中间件

func AuthMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        token := r.Header.Get("Authorization")
        if token == "" {
            http.Error(w, "Unauthorized", http.StatusUnauthorized)
            return
        }
        
        // 验证token逻辑
        userID, err := validateToken(token)
        if err != nil {
            http.Error(w, "Invalid token", http.StatusForbidden)
            return
        }
        
        // 将用户信息存入上下文
        ctx := context.WithValue(r.Context(), "userID", userID)
        next.ServeHTTP(w, r.WithContext(ctx))
    })
}

问题4:项目吸引力分析

这个项目确实有市场需求:

  1. 市场缺口 - Go缺少真正的"全栈"框架,Buffalo最接近但活跃度有限
  2. 性能需求 - 很多Django用户因性能问题考虑迁移到Go
  3. 开发者体验 - Django的快速开发体验在Go生态中尚未完全复制
  4. 企业需求 - 权限管理、后台系统是企业应用的通用需求

示例:简单的模型定义(类似Django ORM风格)

type User struct {
    ID        uint      `gorm:"primarykey"`
    CreatedAt time.Time
    UpdatedAt time.Time
    Username  string    `gorm:"uniqueIndex;size:100"`
    Email     string    `gorm:"uniqueIndex;size:255"`
    Password  string
    IsActive  bool      `gorm:"default:true"`
    IsStaff   bool      `gorm:"default:false"`
    IsSuperuser bool    `gorm:"default:false"`
}

// 自动迁移示例
func AutoMigrate(db *gorm.DB) error {
    return db.AutoMigrate(
        &User{},
        &Permission{},
        &Group{},
        // 其他模型...
    )
}

Go社区对这类框架有实际需求,特别是从Python/Django迁移过来的开发者。项目的成功关键在于平衡"包含电池"的便利性和Go语言的简洁哲学。

回到顶部