Gone是什么—— 一个轻量的,基于Golang的,依赖注入框架

2024-05-14 20:52

本文主要是介绍Gone是什么—— 一个轻量的,基于Golang的,依赖注入框架,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我从头到尾实现了一个Golang的依赖注入框架,并且集成了gin、xorm、redis、cron、消息中间件等功能;自己觉得还挺好用的,推荐给你!也欢迎一起维护!
github地址:https://github.com/gone-io/gone
文档地址:https://goner.fun/
如果可能,请帮忙在github上点个 ⭐️ ;万分感谢!!

文章目录

  • 介绍
    • Gone是什么
    • Web服务
    • 概念

介绍

Gone是什么

首先,Gone是一个轻量的,基于Golang的,依赖注入框架,灵感来源于Java中的Spring Framework;其次,Gone框架中包含了一系列内置组件,通过这些组件提供一整套Web开发方案,提供服务配置、日志追踪、服务调用、数据库访问、消息中间件等微服务常用能力。

下面使用Gone来编写一个Web服务吧!

Web服务

package mainimport ("fmt""github.com/gone-io/gone""github.com/gone-io/gone/goner"
)// 实现一个Goner,什么是Goner? => https://goner.fun/zh/guide/core-concept.html#goner-%E9%80%9D%E8%80%85
type controller struct {gone.Flag //goner 标记,匿名嵌入后,一个结构体就实现了Gonergone.RouteGroup `gone:"gone-gin-router"` //注入根路由
}// 实现 Mount 方法,挂载路由;框架会自动执行该方法
func (ctr *controller) Mount() gone.GinMountError {// 定义请求结构体type Req struct {Msg string `json:"msg"`}//注册 `POST /hello` 的 处理函数ctr.POST("/hello", func(in struct {to  string `gone:"http,query"` //注入http请求Query参数Toreq *Req   `gone:"http,body"`  //注入http请求Body}) any {return fmt.Sprintf("to %s msg is: %s", in.to, in.req.Msg)})return nil
}func main() {//启动服务gone.Serve(func(cemetery gone.Cemetery) error {// 调用框架内置组件,加载gin框架_ = goner.GinPriest(cemetery)//将 一个controller类型的Goner埋葬到墓园//埋葬是什么意思? => https://goner.fun/zh/guide/core-concept.html#bury-%E5%9F%8B%E8%91%AC//墓园是什么意思? => https://goner.fun/zh/guide/core-concept.html#cemetery-%E5%A2%93%E5%9B%ADcemetery.Bury(&controller{})return nil})
}

运行上面代码:go run main.go,程序将监听8080端口,使用curl测试:

curl -X POST 'http://localhost:8080/hello' \-H 'Content-Type: application/json' \--data-raw '{"msg": "你好呀?"}'

结果如下:

{"code":0,"data":"to  msg is: 你好呀?"}

概念

我们编写的代码终究只是死物,除非他们被运行起来。

在Gone中,组件被抽象为Goner(逝者)Goner属性可以注入其他的Goner。Gone启动前,需要将所有 Goners 埋葬(Bury)墓园(cemetery);Gone启动后,会将所有 Goners 复活,建立一个 天国(Heaven),“天国的所有人都不再残缺,他们想要的必定得到满足”。

了解更多,请阅读 Gone的核心概念

这篇关于Gone是什么—— 一个轻量的,基于Golang的,依赖注入框架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/989822

相关文章

golang float和科学计数法转字符串的实现方式

《golangfloat和科学计数法转字符串的实现方式》:本文主要介绍golangfloat和科学计数法转字符串的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望... 目录golang float和科学计数法转字符串需要对float转字符串做处理总结golang float

golang实现延迟队列(delay queue)的两种实现

《golang实现延迟队列(delayqueue)的两种实现》本文主要介绍了golang实现延迟队列(delayqueue)的两种实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录1 延迟队列:邮件提醒、订单自动取消2 实现2.1 simplChina编程e简单版:go自带的time

Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)

《Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)》本文主要介绍了Golang分布式锁实现,采用Redis+Lua脚本确保原子性,持可重入和自动续期,用于防止超卖及重复下单,具有一定... 目录1 概念应用场景分布式锁必备特性2 思路分析宕机与过期防止误删keyLua保证原子性可重入锁自动

golang 对象池sync.Pool的实现

《golang对象池sync.Pool的实现》:本文主要介绍golang对象池sync.Pool的实现,用于缓存和复用临时对象,以减少内存分配和垃圾回收的压力,下面就来介绍一下,感兴趣的可以了解... 目录sync.Pool的用法原理sync.Pool 的使用示例sync.Pool 的使用场景注意sync.

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos

golang中slice扩容的具体实现

《golang中slice扩容的具体实现》Go语言中的切片扩容机制是Go运行时的一个关键部分,它确保切片在动态增加元素时能够高效地管理内存,本文主要介绍了golang中slice扩容的具体实现,感兴趣... 目录1. 切片扩容的触发append 函数的实现2. runtime.growslice 函数gro

golang实现动态路由的项目实践

《golang实现动态路由的项目实践》本文主要介绍了golang实现动态路由项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习... 目录一、动态路由1.结构体(数据库的定义)2.预加载preload3.添加关联的方法一、动态路由1

Golang interface{}的具体使用

《Golanginterface{}的具体使用》interface{}是Go中可以表示任意类型的空接口,本文主要介绍了Golanginterface{}的具体使用,具有一定的参考价值,感兴趣的可以了... 目录一、什么是 interface{}?定义形China编程式:二、interface{} 有什么特别的?✅

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Maven 依赖发布与仓库治理的过程解析

《Maven依赖发布与仓库治理的过程解析》:本文主要介绍Maven依赖发布与仓库治理的过程解析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录Maven 依赖发布与仓库治理引言第一章:distributionManagement配置的工程化实践1