Golang中真的不建议使用框架吗?

Golang中真的不建议使用框架吗? 关于Go语言中的框架,我是Go语言新手,心中有很多疑问。

我应该从框架开始学习吗?你有什么建议?

8 回复

对于基础的CRUD Web应用程序,我比较关心身份验证的问题。我需要使用框架吗?

更多关于Golang中真的不建议使用框架吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我们基于pongo2开发了一个新的模板引擎。

这是什么框架?你考虑开发什么类型的应用程序?命令行工具?网络服务?其他类型的服务器?游戏?

你好,我也是新来的。我脑海中也有和你一样的疑问。我希望有使用Golang构建Web系统的人能对此发表一些看法。

func main() {
    fmt.Println("hello world")
}

我不使用 Go 进行 Web 开发,但根据我目前的了解,我认为 Web 开发框架并非必需。

不过我会使用身份验证和授权库,具体选择哪个需要你自己去探索。

另外我会寻找替代的模板语言,因为我对 Go 模板的语法不太满意。

当我们在公司尝试使用它时,在处理具有重要空格的文件时,我们很难保持正确的空格数量。

此外,语法特性以及上下文中只能包含单个值的设定,都需要人们去适应。

在我们公司,我们已经习惯了 Ruby 使用 ERB 的方式……

NobbZ:

另外我会寻找替代模板语言,因为我对 Go 模板的语法不太信服。

能否请您详细说明一下"模板语言"?如您所知,我是 Go 语言的新手,对我来说 Go 的模板似乎不太灵活。这只是我目前的看法。

在Go语言社区中,关于是否使用框架存在不同观点,但普遍共识是:对于新手,建议从标准库开始,逐步理解语言核心概念,而不是直接依赖框架。Go的标准库设计优秀,覆盖了网络、并发、I/O等常见需求,能帮助你打下坚实基础。以下我会解释原因,并给出示例。

为什么建议从标准库开始?

  • 学习核心概念:Go的标准库(如net/http)提供了构建Web应用的基本工具。直接使用它,你能理解HTTP处理、路由、中间件等底层机制,避免被框架抽象掩盖细节。
  • 避免过度工程:框架常引入复杂性和额外依赖,对于简单项目可能显得臃肿。标准库轻量,适合快速上手和性能敏感场景。
  • 社区趋势:许多Go项目(如Docker、Kubernetes)优先使用标准库或轻量库,强调简洁和可控性。

示例:使用标准库构建简单HTTP服务器

假设你想创建一个简单的Web服务器,处理HTTP请求。以下是一个基本示例,不使用任何框架:

package main

import (
    "fmt"
    "net/http"
)

// 定义一个处理函数,用于根路径
func helloHandler(w http.ResponseWriter, r *http.Request) {
    if r.URL.Path != "/" {
        http.NotFound(w, r)
        return
    }
    fmt.Fprintf(w, "Hello, World! This is a simple Go server without a framework.")
}

// 另一个处理函数,用于/api端点
func apiHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "API endpoint response.")
}

func main() {
    // 注册处理函数到路由
    http.HandleFunc("/", helloHandler)
    http.HandleFunc("/api", apiHandler)

    // 启动服务器,监听8080端口
    fmt.Println("Server starting on :8080")
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        fmt.Printf("Server failed to start: %v\n", err)
    }
}

这个例子展示了如何使用net/http包创建多路由的服务器。你可以在本地运行它,访问http://localhost:8080/http://localhost:8080/api查看效果。

何时考虑使用框架?

随着项目复杂度增加,如果标准库无法高效满足需求(如需要高级路由、中间件链或ORM),可以考虑轻量框架如Gin、Echo或Beego。例如,Gin框架简化了路由和JSON处理:

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 with Gin framework!"})
    })
    r.Run(":8080") // 监听并在 0.0.0.0:8080 上启动服务
}

总结

作为新手,从标准库起步能让你更好地掌握Go的哲学:简单、高效。一旦熟悉了基础,再根据项目需求评估是否引入框架。实践是关键:多写代码,逐步构建应用。

回到顶部