package
0.0.30
Repository: https://github.com/leancodebox/goose.git
Documentation: pkg.go.dev

# README

一即使全,全既是一

one is all , all is one

本文介绍了一个用于Go语言开发约定的配置文件实现包。许多知名框架(如Laravel、Symfony和Spring)和三方包都约定了一些引导流程,使得用户能够以简便的方式引用和使用它们。 Go语言通过依赖检测(相对于Java class,Go的粒度更为细化)和 init()函数的存在,使得我们可以更加简单地实现约定模型。

本包负责读取配置文件。对于想要使用约定方式进行开发的第三方包,可以遵循以下步骤:

以封装Redis实例包为例,我们在config.toml中定义配置字段,并在Redis包中获取相应的配置:

package redisManager

import (
	"github.com/leancodebox/goose/perferences"
)

var (
	config = perferences.GetExclusivePreferences()
)

var std *redisClient

func init(){
	if configIsSet(config){
		std = getNewClient(config)
    }
}

....

如果使用者想要使用Redis包,只需简单地引入即可。在使用第三方包并设置更多依赖时,约定方式将会变得更加方便。

例如,假设你想要开发一个基于Redis的新队列并将其封装为一个第三方包,那么在使用时只需引入Redis包即可,无需关心前两步约定的设置。在这种情况下,你只需要专注于封装队列的业务逻辑即可:

package queue

import (
	"xxxx/redis"
)

var (
	defaultRedis = redis.GetStdRedis()
)

var queue *queueManager

func init(){
	if defaultRedis != nil {
		queue = getNewQueueManager(defaultRedis)
    }
}

....

要使用这个代码,用户只需在 config.toml 中设置必要的内容。这是一种框架/引导约定,其实现依赖于Go本身的机制,不需要编写任何boot代码(例如spring-boot、laravel-boot、symfony-boot)。 它实现了框架和模块的组合,而且采用了无专门boot代码的约定实现方式。

如果你认同这种开发方式,我们可以一起探讨如何进一步改进它。