hotreload

package
v0.0.0-...-3e86cb5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 13, 2022 License: GPL-3.0 Imports: 6 Imported by: 0

README

Golang 配置文件热加载

使用 github.com/fsnotify/fsnotify,监听 CreateRemoveWriteChmodRename 等事件,实现对文件状态的实时监听,当文件有变化时执行已注册的回调函数(如下),实现对配置的重新加载。

// CallbackFunc 配置回调函数
// filename:文件相对路径
type CallbackFunc func(filename string) error

以读取配置为例,来说明如何实现热加载:

定义配置文件对应结构体

配置文件 config.json 内容:

{
    "model":"aaaaa"
}

为配置文件定义结构:

type Config struct {
	Model string `json:"model"`
}

定义读取配置文件的方法

var cnf Config

func loadConfig(filename string) error {
	file, err := ioutil.ReadFile(filename)
	if err != nil {
		log.Fatalln(err)
	}

	err = jsoniter.Unmarshal(file, &cnf)
	if err != nil {
		log.Fatalln(err)
	}

	fmt.Printf("config:%+v\n", cnf)

	return nil
}

注册回调

// 1. 注册配置文件监听及回调
hotreload.Register("conf/config.json", loadConfig)

启动监听

// 2. 启动监听
hotreload.Watcher()

完整 demo

package main

import (
	"fmt"
	"io/ioutil"
	"log"

	"github.com/LeungGeorge/grimoire-tool/lib/hotreload"
	"github.com/gin-gonic/gin"
	"github.com/json-iterator/go"
)

type Config struct {
	Model string `json:"model"`
}

var cnf Config

func loadConfig(filename string) error {
	file, err := ioutil.ReadFile(filename)
	if err != nil {
		log.Fatalln(err)
	}

	err = jsoniter.Unmarshal(file, &cnf)
	if err != nil {
		log.Fatalln(err)
	}

	fmt.Printf("config:%+v\n", cnf)

	return nil
}

func main() {
	r := gin.Default()

    // 1. 注册配置文件监听及回调
	hotreload.Register("conf/config.json", loadConfig)
    // 2. 启动监听
	hotreload.Watcher()

	r.Run()
}

输出(可以看到 demo 读取到 conf/config.json 的内容):

config:{Model:aaaaa}

Documentation

Overview

Package hotreload TODO

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Register

func Register(filename string, fn CallbackFunc) error

Register 注册监控对象

func Watcher

func Watcher()

Watcher TODO

Types

type CallbackFunc

type CallbackFunc func(filename string) error

CallbackFunc 配置回调函数 filename:文件相对路径

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL