Golang在框架中真的不需要吗?如果需要应该用哪些框架?
Golang在框架中真的不需要吗?如果需要应该用哪些框架? 你好!最近我在某处读到,Go语言完全不需要框架,那么学习它们的理由是什么呢?除了能加快你的工作速度?在科技公司的实际项目中,通常使用哪些框架?我现在非常困惑……
一如既往,这取决于具体情况。没有典型的“真实项目”,只有需求相似或不同的项目。其中一些需求可能使得使用框架变得可行,而另一些则可能不行。
从 Go 标准库开始。
更多关于Golang在框架中真的不需要吗?如果需要应该用哪些框架?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
不要仅仅局限于标准库,即使它很优秀。复杂的应用程序需要更多功能,例如路由、用于身份验证或会话的中间件。如果没有一个合适的框架或工具包,很难轻松实现所有这些功能。我个人使用 Gorilla 工具包,但也有许多不错的选择,例如 Echo、Gin 等。
我只用Go来编写自己的个人项目,从未参与过Go的团队开发,所以请对我的建议持保留态度,但我建议默认情况下使用标准库,直到你有理由不这样做。
当你遇到具体场景时,例如:
我遇到了问题
A。我尝试使用标准库中的包X,但由于B的原因,这很困难,并且/或者它导致了与C相关的问题……
我建议在这个社区(或类似的社区)发帖询问“我现在应该尝试什么?”。这里的人们会提供有用的答案,比如“我也遇到过那个问题,包 Y 可以解决它”,或者更好的是,“标准库中的包 Z 就是专门为解决这个问题而构建的!”
通过尽量坚持使用标准库,你可以让使用你包的开发者更容易理解它,这样他们既能在自己的项目中放心使用,也更有可能为你的项目做出贡献,因为它是基于标准库的。
然而,当你的问题领域超出了标准库所能解决的范围,确实需要标准库之外的功能时,那么寻找另一个库就是合理的。阿尔伯特·爱因斯坦有句名言:“凡事应尽可能简单,但不宜过于简单。”
lutzhorn 的建议非常棒。请坚持使用标准库。
这样做有很多理由:
- 你将学习标准库,它非常出色(无论是质量还是性能)。
- 框架通常是在标准库概念的基础上进行扩展,因此,即使你(以后)决定使用框架,如果你已经了解标准库,情况会更好。
- 标准库始终与你正在使用的 Go 版本兼容,因为它内置于 Go 发行版中。
- 如果你使用外部库,会引入额外的依赖: a) 可能会使编写代码变得更棘手,因为 Go 不允许循环包依赖。 b) 可能会使编译代码变得更棘手(这就是引入 Go 模块的原因)。 c) 外部库的质量参差不齐(有些确实很好,其他的则不然)。 d) 并不总是能明显看出哪些版本的外部库与哪些版本的 Go 兼容。
关于学习 Go 的更多笔记:
jeffkayser2/learningGo
关于学习 Go 的笔记。通过在 GitHub 上创建帐户为 jeffkayser2/learningGo 的开发做出贡献。
祝你好运。
在Go语言开发中,是否需要框架取决于具体场景。虽然Go标准库非常强大,但框架确实能提升开发效率,特别是在大型项目中。以下是实际项目中常用的框架及其典型应用场景:
1. Web开发框架
Gin是目前最流行的Web框架,性能优秀且易于使用:
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/api/users", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "用户列表",
})
})
r.POST("/api/users", func(c *gin.Context) {
// 处理用户创建逻辑
c.JSON(201, gin.H{"status": "created"})
})
r.Run(":8080")
}
Echo是另一个高性能选择,API设计简洁:
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, World!")
})
e.Logger.Fatal(e.Start(":1323"))
}
2. 微服务框架
Go-kit适用于构建微服务架构:
package main
import (
"context"
"github.com/go-kit/kit/endpoint"
httptransport "github.com/go-kit/kit/transport/http"
)
func makeEndpoint() endpoint.Endpoint {
return func(ctx context.Context, request interface{}) (interface{}, error) {
return map[string]string{"status": "ok"}, nil
}
}
func main() {
ep := makeEndpoint()
handler := httptransport.NewServer(
ep,
decodeRequest,
encodeResponse,
)
http.Handle("/api", handler)
}
3. 全栈框架
Buffalo提供完整的开发体验:
package actions
import (
"github.com/gobuffalo/buffalo"
"github.com/gobuffalo/envy"
)
var app *buffalo.App
func App() *buffalo.App {
if app == nil {
app = buffalo.New(buffalo.Options{
Env: envy.Get("GO_ENV", "development"),
})
app.GET("/", HomeHandler)
app.ServeFiles("/assets", assetsBox)
}
return app
}
4. ORM框架
GORM是最常用的ORM:
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type User struct {
gorm.Model
Name string
Email string `gorm:"uniqueIndex"`
}
func main() {
dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("连接数据库失败")
}
// 自动迁移
db.AutoMigrate(&User{})
// 创建用户
db.Create(&User{Name: "张三", Email: "zhangsan@example.com"})
}
实际项目中的选择标准
科技公司通常根据以下因素选择框架:
- 项目规模:小型API可能只用标准库,大型系统需要完整框架
- 团队熟悉度:已有技术栈和经验
- 性能要求:高并发场景选择Gin/Echo,需要快速开发选Buffalo
- 生态支持:中间件、插件、社区活跃度
性能对比示例
// 标准库实现
func stdHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(map[string]string{"status": "ok"})
}
// Gin框架实现
func ginHandler(c *gin.Context) {
c.JSON(200, gin.H{"status": "ok"})
}
// 两者性能差异在微秒级别,但对开发效率影响显著
在科技公司实际项目中,约70%的团队会使用框架加速开发,特别是需要快速迭代的业务系统。完全不用框架的情况多见于基础设施、工具类项目或对性能有极端要求的场景。
学习框架的理由很明确:它们提供了经过验证的最佳实践、标准化项目结构、丰富的中间件生态,并能显著减少重复代码。例如,Gin的路由性能比标准库高30%,且提供了参数绑定、验证、中间件链等生产级功能。


