一站式开发框架 Go-Spring 发布 v1.1.2 版本

【首发】Go-Spring基础教程 Go-Spring基础教程       最近想要转向golang,然后发现go的生态还不够强大,众所周知spring依托ioc和apo成为了一方霸主,私以为golang还是需要ioc的,遂在网上寻找包。发现有滴滴开源的go-spring,意图实现go语言上的springboot,只能说大厂还是相对有保证的。就先摸索了。GItee地址 github地址       虽说是大厂,但是文档真的很 阅读详情

距离上次发版仅两周的时间,Go 后端一站式开发框架 Go-Spring 又发布了新的版本,新版本实现了两个非常重要的特性:动态配置和 Bean 共享。

动态配置

有时候我们想要在不停机的情况下可以修改程序的配置,更改程序的行为,即所谓的“动态配置”。Go-Spring 通过使用专门的数据类型实现了和普通属性一样的使用方式,既支持默认值,也支持类型校验,同时还保证了数据的并发安全,非常简单且强大。

type DynamicConfig struct {
	Int   dync.Int64   `value:"${int:=3}" validate:"$<6"`
	Float dync.Float64 `value:"${float:=1.2}"`
	Map   dync.Ref     `value:"${map:=}"`
	Slice dync.Ref     `value:"${slice:=}"`
	Event dync.Event   `value:"${event}"`
}

type DynamicConfigWrapper struct {
	Wrapper DynamicConfig `value:"${wrapper}"`
}

func TestDynamic(t *testing.T) {

	var cfg *DynamicConfig
	wrapper := new(DynamicConfigWrapper)

	c := gs.New()
	c.Provide(func() *DynamicConfig {
		config := new(DynamicConfig)
		config.Int.OnValidate(func(v int64) error {
			if v < 3 {
				return errors.New("should greeter than 3")
			}
			return nil
		})
		config.Slice.Init(make([]string, 0))
		config.Map.Init(make(map[string]string))
		config.Event.OnEvent(func(prop *conf.Properties) error {
			fmt.Println("event fired.")
			return nil
		})
		return config
	}).Init(func(config *DynamicConfig) {
		cfg = config
	})
	c.Object(wrapper).Init(func(p *DynamicConfigWrapper) {
		p.Wrapper.Slice.Init(make([]string, 0))
		p.Wrapper.Map.Init(make(map[string]string))
		p.Wrapper.Event.OnEvent(func(prop *conf.Properties) error {
			fmt.Println("event fired.")
			return nil
		})
	})
	err := c.Refresh()
	assert.Nil(t, err)

	{
		b, _ := json.Marshal(cfg)
		assert.Equal(t, string(b), `{"Int":3,"Float":1.2,"Map":{},"Slice":[],"Event":{}}`)
		b, _ = json.Marshal(wrapper)
		assert.Equal(t, string(b), `{"Wrapper":{"Int":3,"Float":1.2,"Map":{},"Slice":[],"Event":{}}}`)
	}

	{
		p := conf.New()
		p.Set("int", 4)
		p.Set("float", 2.3)
		p.Set("map.a", 1)
		p.Set("map.b", 2)
		p.Set("slice[0]", 3)
		p.Set("slice[1]", 4)
		p.Set("wrapper.int", 3)
		p.Set("wrapper.float", 1.5)
		p.Set("wrapper.map.a", 9)
		p.Set("wrapper.map.b", 8)
		p.Set("wrapper.slice[0]", 4)
		p.Set("wrapper.slice[1]", 6)
		c.Properties().Refresh(p)
	}

	{
		b, _ := json.Marshal(cfg)
		assert.Equal(t, string(b), `{"Int":4,"Float":2.3,"Map":{"a":"1","b":"2"},"Slice":["3","4"],"Event":{}}`)
		b, _ = json.Marshal(wrapper)
		assert.Equal(t, string(b), `{"Wrapper":{"Int":3,"Float":1.5,"Map":{"a":"9","b":"8"},"Slice":["4","6"],"Event":{}}}`)
	}
}

Bean 共享

Java Spring Redis 在首页使用了一个非常特别的特性,可以将一个 Bean 的字段值注入到另一个对象中,看起来就像是 Bean 被共享了。现在 Go-Spring 也能支持这样的使用方式。

type runner struct {
	Client *redis.Client           `autowire:""`
	StrOps *redis.StringOperations `autowire:"RedisClient"`
}

func (r *runner) Run(ctx gs.Context) {

	_, err := r.Client.OpsForString().Get(ctx.Context(), "nonexisting")
	if !redis.IsErrNil(err) {
		panic(errors.New("should be redis.ErrNil"))
	}

	_, err = r.Client.OpsForString().Set(ctx.Context(), "mykey", "Hello")
	util.Panic(err).When(err != nil)

	v, err := r.Client.OpsForString().Get(ctx.Context(), "mykey")
	util.Panic(err).When(err != nil)

	if v != "Hello" {
		panic(errors.New("should be \"Hello\""))
	}

	v, err = r.StrOps.Get(ctx.Context(), "mykey")
	util.Panic(err).When(err != nil)

	if v != "Hello" {
		panic(errors.New("should be \"Hello\""))
	}

	go gs.ShutDown()
}

func main() {
	gs.Object(&runner{}).Export((*gs.AppRunner)(nil))
	fmt.Printf("program exited %v\n", gs.Web(false).Run())
}
IntelliJ IDEA V2022.1版本亮点——改进框架与技术 IntelliJ IDEA 发布重大版本更新,V2022.1进行了许多重要功能更新,本次更新信息将分三部分阐述,本文是第二部分。 阅读详情

相关推荐

Go-Spring: 一个类似于 Java Spring 全家桶的 GoLang 应用程序框架

总结来说,Go-Spring 是一个模仿 Java Spring 全家桶实现的 GoLang 应用程序框架,旨在提供与 Spring 类似的特性和开发体验。通过使用 Go-Spring,开发者可以用熟悉的方式构建和管理 GoLang 应用程序,从而提高开发效率并降低维护成本。它的目标是让开发者能够用熟悉的方式来构建和管理 GoLang 应用程序,提供类似于 Spring 的依赖注入、控制反转、面向切面编程等特性。开发者可以根据自己的需求选择适合的功能来构建和扩展应用程序。的控制器,并定义了一个。

BcpiDev的博客 1078

【亲测免费】 探索 Go-Spring:赋予 Go 语言 Spring 式的强大魅力

如果你是一位经验丰富的 Java 程序员,习惯了 Spring 框架带来的便利,并希望在 Go 语言中找到类似的开发体验,那么 Go-Spring 会是一个理想的选择。它致力于让你在 Go 程序中享受到与 Java Spring 类似的功能,包括依赖注入、自动化配置等,同时也注重性能和简洁性。 **1. 项目介绍** Go-Spring 是一款由 Go 语言编写的轻量级框架,其目标是为 Go ...

gitblog_00057的博客 1418

go-spring:基于IoC的Go一级一站式开发框架:rocket:

Go-Spring的愿景是让Go程序员也能用上如Java Spring那般威力强大的编程框架。 其特性如下: 提供了完善的IoC容器,支持依赖注入,属性绑定; 提供了强大的启动器框架,支持自动装配,开箱即用; 提供了通用组件的抽象层,支持灵活地替换替代实现; Go-Spring当前使用Go1.12进行开发,使用Go Modules进行依赖管理。 IoC容器 Go-Spring不仅实现了如Java Spring那般功能强大的IoC容器,还扩展了Bean的概念。在Go中,对象(即指针),数组,地图,函数指针,这些都是Bean,都可以放到IoC容器里。 常用的Java Spring注解 对应的Go

Go-Spring 开发框架入门指南

Go-Spring 开发框架入门指南 项目介绍 Go-Spring 是一款基于IoC(控制反转)理念打造的一站式后端开发框架,旨在为Go语言开发者带来类似Java Spring的强大编程体验。该框架由滴滴出行(Didi Chuxing)贡献,采用Apache-2.0许可协议发布。 Go-Spring的核心优势在于其简洁性、安全性及可靠性,它提供了以下关键功能: IoC容器: 支持依赖注入和属性绑...

gitblog_00389的博客 889

YOLOv8的Anchor-Free革新:从中心点预测到动态IoU匹配的全面解析

本文深入解析了YOLOv8采用Anchor-Free(无锚框)设计的核心优势与实现机制。通过摒弃预设锚框,模型直接预测目标中心点与宽高,结合解耦头、动态IoU匹配及Varifocal Loss等创新,显著简化了训练流程并提升了检测精度,尤其在小目标检测和模型泛化能力上表现突出。

weixin_29094301的博客 356

常见机械臂模型不用找!Mujoco这儿都有!

高质量的模型集合,franka panda,so-arm100,ur之类的机械臂都有。常见机械臂模型不用找!Mujoco这儿都有!大概346M,网速不行的可以下载zip。

darcsdn 992

Go-Spring:基于IoC的Go后端一站式开发框架

Go-Spring 是一个基于 IoC(控制反转)的 Go 后端开发框架,旨在为 Go 程序员提供一种简单、安全、可信赖的编程体验,类似于 Java 中的 Spring 框架。 ## 1. 项目基础介绍及编程语言 Go-Spring 使用 Go 语言开发,是一个全功能的后端开发框架。它提供了 IoC 容器、启动器框架、组件抽象层等特性,帮助开发者快速构建高质量的后端服务。 ## 2. 核心功...

gitblog_00846的博客 1265

zemax混合式非序列模拟

注意不要点击左侧的非序列模式,那个时纯粹的非序列,会清除序列模式的数据。第2、4、6透镜材质为空气,是为了让光线进入到多重透镜内部。这时普通的优化方式会失败。平行光束经过多焦透镜时,会汇聚在不同焦距处。所以还需要控制能量的大小,进行优化。接下来用非序列模式设计一个多焦透镜。像面的孔径为圆形通光孔:0-1.2。透镜不同位置处有不同的聚焦位置。透镜的z轴位置相同,重合。

fendoudecheng的博客 3067

Go-Spring 全新版本 v1.1.0

此外,在 v1.1.0 版本基础上,后续可能还有一些小版本更新,如 v1.1.3 版本。Go-Spring 全新版本 v1.1.0 已于 2025 年发布。

xixixixixixixi21的博客 592

6、掌握 CorelDRAW:从基础操作到创意绘图

本文详细介绍了CorelDRAW的基础操作与创意绘图技巧,涵盖软件使用注意事项、常用快捷键、全局与局部设置的区别、Dockers面板的高效使用,并通过绘制带星星图案的球实例,逐步演示了对象创建、编辑、复制、分布优化、元素添加、颜色与特效调整等核心功能,最后讲解了作品的保存与输出方法,帮助用户从入门到进阶掌握CorelDRAW的设计流程。

snow3的博客 120

ADS基础教程20 - 电磁仿真(EM)参数化仿真

一、引言二、参数化设置1.参数定义2.参数赋值3.创建EM模型和符号四、总结1)在Layout视图,菜单栏中选中EMComponent2)在弹出的参数编辑框中,采用标称/扰动()设计。使用子网(Subnetwork)参数。这些方法是互斥的,在为单个组件定义参数时不能将它们组合起来。标称/扰动(Nominal/Perturbed)参数使用平面化布局场景,并且只包含端口和原始图形形状(如多边形、矩形和圆形)时定义。

XZ_ZC的博客 4028

Go-Spring v1.2.0 版本简介

本文将从设计理念、核心特性、配置管理、Bean 管理、生命周期模型、动态刷新、测试支持及生态对比等方面,全面剖析 Go‑Spring 的价值与优势。通过 .AsRunner()、.AsJob()、.AsServer() 注册,框架在 gs.Run() 时并发启动所有角色,并统一监听退出信号,保障系统在高可用场景中的稳定与一致性。注册方式:支持 gs.Object(obj)、gs.Provide(ctor)、gs.Register(beanDef)、gs.GroupRegister(fn) 等多种注册手段;

weixin_55010563的博客 330

〔重庆理工大学〕计算机组成原理课设报告--16位单周期CPU设计

本课程设计的实验平台为Altera Quartus II 软件和Altera Cyclone V Starter 工具箱。(1)Cyclone V是Altera FPGAs家族的一类,它面向低功耗应用。Cyclone V GX 5CGXFC5C6F27C7N 芯片有不同的转换器,按钮,LED灯,七段显示器,HDMI接口,SD卡读卡器以及其他链接等。Cyclone V GX 5CGXFC5C6F27C7N是Starter工具箱的重要组件。(2)测试台包含在测设备(DUT)和用于仿真的模拟输入。

Pretty Boy Fox的博客 1066
上一篇: 惊呆面试官的回答:HashMap和TreeMap的区别
下一篇: Python 实现八个概率分布公式及可视化
java小姜在线冲
博客等级 码龄4年 53粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值