为什么我选择“golly”框架来构建我的下一个基于 Golang 的 REST API?

为什么选择go(golang)进行服务器端开发?

选择 go (golang) 进行服务器端开发通常是由其关键优势驱动的:

性能:go 的并发模型基于 goroutine 和 channel,可以同时高效处理多个任务,非常适合高性能服务器应用。

简单性:该语言的设计简单易读,语法简约。这使得维护变得更容易,即使对于大型项目也是如此。

快速编译和执行:go 直接编译为机器代码,与 python 或 node.js 等解释性语言相比,执行时间更快。

可扩展性:go 内置的并发性和轻量级特性使其成为构建可处理大量请求的可扩展服务的不错选择。

立即学习“go语言免费学习笔记(深入)”;

强大的标准库:go 附带了强大的标准库,特别是用于构建网络服务、处理 http 和管理并发,减少对外部依赖的需求。

这些因素使 go 非常适合现代服务器端应用程序,特别是当性能和可扩展性很重要时。

如何在 golang 中构建 rest api 服务器?

有很多框架可以在 golang 中构建 rest api 服务器,例如 gin、gorrilla-mux 等等。

我们将使用一个新的框架 golly,它提供了一套全面的工具来构建您的 golang 应用程序。

让我们深入了解实施

我们想要构建的所需 api

  1. get /api/v1/userspost /api/v1/usersput /api/v1/users/:iddelete /api/v1/users/:id

登录后复制

一旦我们定义了所需的 api,我们就开始启动 go 项目。使用以下命令:-

  1. mkdir my-go-servercd my-go-servergo mod init rest_servergo get oss.nandlabs.io/golly

登录后复制

执行上述操作后,您应该能够看到如下所示的文件夹结构

为什么我选择“golly”框架来构建我的下一个基于 Golang 的 REST API?

现在我们可以开始创建我们想要的服务器结构

创建一个 main.go 文件,其中包含 main(),即 golang 应用程序的入口点

  1. package mainimport "rest_server/server"func main() { // create the instance of your server srv := server.newserver() // start your server srv.start()}

登录后复制

创建一个 /server/server.go 文件,其中包含您的服务器配置

  1. package serverimport ( "rest_server/handlers" "rest_server/store" "oss.nandlabs.io/golly/lifecycle" "oss.nandlabs.io/golly/rest/server")type server struct { store *store.store}func newserver() *server { return &server{ store: store.newstore(), }}func (s *server) start() { // register the router by creating the server object restserver, err := server.default() if err != nil { panic(err) } // add path prefix if you want restserver.opts().pathprefix = "/api/v1" // register routes restserver.get("/users", handlers.getusers) restserver.post("/users", handlers.adduser) restserver.put("/users/:id", handlers.updateuser) restserver.delete("/users/:id", handlers.deleteuser) // create the http.server object and register the router as handler // provide the necessary configurations such as port, readtimeout, writetimeout... manager := lifecycle.newsimplecomponentmanager() // register the server manager.register(restserver) // start the server manager.startandwait()}

登录后复制

您想要实现的应用程序结构如下

为什么我选择“golly”框架来构建我的下一个基于 Golang 的 REST API?

在 /store/store.go 下创建一个内存存储以测试您的 crud 操作。

  1. package storeimport "rest_server/models"type store struct { data map[string]models.item}var initstore *storefunc newstore() *store { initstore = &store{data: make(map[string]models.item)} return initstore}func getstore() *store { return initstore}func (s *store) getall() []models.item { items := []models.item{} for _, item := range s.data { items = append(items, item) } return items}func (s *store) getbyid(id string) (item models.item, exists bool) { item, exists = s.data[id] return}func (s *store) put(id string, item models.item) { s.data[id] = item}func (s *store) delete(id string) { delete(s.data, id)}

登录后复制

这指的是 /models/item.go 下的模型

  1. package modelstype item struct { id string `json:"id"` value string `json:"value"`}

登录后复制

处理程序将包含 /server/server.go 下定义的每个端点的处理程序。

/handlers/adduser.go 的一个这样的实现如下

  1. package handlersimport ( "encoding/json" "net/http" "rest_server/models" "rest_server/response" "rest_server/store" "oss.nandlabs.io/golly/rest/server" "oss.nandlabs.io/golly/uuid")func adduser(ctx server.context) { // create the model type variable var item models.item // decode the request body to the item reference if err := json.newdecoder(ctx.getrequest().body).decode(&item); err != nil { // in case of error write the error to the response and return response.error(ctx.httpreswriter(), http.statusbadrequest, "invalid request payload") return } // get the store object initstore := store.getstore() uuid, err := uuid.v1() if err == nil { // assign the uuid generated to the item item.id = uuid.string() // add the input body item to the store initstore.put(item.id, item) // generate a success response response.json(ctx.httpreswriter(), http.statuscreated, item) } else { // generate the error response response.error(ctx.httpreswriter(), http.statusbadrequest, "error generating uuid") return }}

登录后复制

类似地,您可以使用所需的逻辑创建其他处理程序。

完整示例可以在此 github 存储库中找到

创建服务器后,您可以使用以下命令启动服务器

  1. cd /my-go-servergo run main.go

登录后复制

输出应如下所示

为什么我选择“golly”框架来构建我的下一个基于 Golang 的 REST API?
您可以看到注册的端点以及服务器的启动位置。

服务器启动后,您可以使用 postman 或 curl 命令来调用您的 api。

您可以看到我们使用 golang 中的 golly 框架启动 rest 服务器的速度有多快。

使用 golly 作为构建 go 应用程序的首选框架的好处

所有使用的库,包括生命周期管理、uuid 生成、日志记录、休息服务器管理等等,都是由 golly 开箱即用提供的。存在大量内置库,我不必导入多个第三方库,这使我的 go.mod 保持干净和易于管理。简单快速的模块实施,轻松的学习曲线。开源库

有关 golly 的更多详细信息,请访问存储库 golly。您可以查看代码并随时贡献!

感谢您阅读这篇文章!!
如果您有任何疑问,请在评论中添加。

以上就是为什么我选择“golly”框架来构建我的下一个基于 Golang 的 REST API?的详细内容,更多请关注【创想鸟】其它相关文章!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

点点赞赏,手留余香

给TA打赏
共0人
还没有人赞赏,快来当第一个赞赏的人吧!
    编程技术

    Go 语言中如何简洁地获取字符串字符?

    2025-2-28 16:03:32

    编程技术

    GOPATH 和 Go Module 之间有什么区别?

    2025-2-28 16:03:51

    0 条回复 A文章作者 M管理员
    欢迎您,新朋友,感谢参与互动!
      暂无讨论,说说你的看法吧
    个人中心
    购物车
    优惠劵
    今日签到
    私信列表
    搜索