go基础库之带功能选项的文件配置

栏目: 数据库 · Oracle · 发布时间: 5年前

内容简介:本篇将介绍如何处理应用程序的可选配置,并在具有文件配置的实际案例中使用功能选项模式。

本篇将介绍如何处理应用程序的可选配置,并在具有文件配置的实际案例中使用功能选项模式。

带功能选项的文件配置

Golang 版本

1.12.1

前言

本篇将介绍如何处理应用程序的可选配置,并在具有文件配置的实际案例中使用功能选项模式。

实现

创建文件 main.go ,代码如下:

package main

import (
	"encoding/json"
	"fmt"
	"os"
)

type Client struct {
	consulIP   string
	connString string
}

func (c *Client) String() string {
	return fmt.Sprintf("ConsulIP:%s,connString:%s", c.consulIP, c.connString)
}

var defaultClient = Client{
	consulIP:   "localhost:9000",
	connString: "postgres://localhost:5432",
}

// ConfigFunc用作要在功能选项中使用的类型
type ConfigFunc func(opt *Client)

// FromFile func返回ConfigFunc类型。这样它就可以从json读取配置
func FromFile(path string) ConfigFunc {
	return func(opt *Client) {
		f, err := os.Open(path)
		if err != nil {
			panic(err)
		}
		defer f.Close()
		decoder := json.NewDecoder(f)

		fop := struct {
			ConsulIP string `json:"consul_ip"`
		}{}
		err = decoder.Decode(&fop)
		if err != nil {
			panic(err)
		}
		opt.consulIP = fop.ConsulIP
	}
}

// FromEnv从环境变量读取配置并将它们与现有变量组合
func FromEnv() ConfigFunc {
	return func(opt *Client) {
		connStr, exist := os.LookupEnv("CONN_DB")
		if exist {
			opt.connString = connStr
		}
	}
}

func NewClient(opts ...ConfigFunc) *Client {
	client := defaultClient
	for _, val := range opts {
		val(&client)
	}
	return &client
}

func main() {
	client := NewClient(FromFile("config.json"), FromEnv())
	fmt.Println(client.String())
}

创建文件 config.json ,内容如下:

{
  "consul_ip":"127.0.0.1"
}
$ export CONN_DB=oracle://local:5921 && go run main.go
ConsulIP:127.0.0.1,connString:oracle://local:5921

原理

函数选项模式的核心概念是配置API包含函数参数。在本例中, NewClient 函数接受不同数量的 ConfigFunc 参数,然后在 defaultClient 结构上逐一应用这些参数。通过这种方式,可以非常灵活地修改默认配置。

请参阅 FromFileFromEnv 函数,它们返回 ConfigFunc ,实际上是访问文件或环境变量。

最后,可以检查输出,其中包含来自文件和环境变量的值。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

一只小鸟告诉我的事

一只小鸟告诉我的事

[美]比兹·斯通 / 顾雨佳 / 中信出版社 / 2014-11 / 59.00元

比兹•斯通,无疑是自乔布斯后的又一个硅谷奇迹! 70后的他,出身贫苦,一无所有,却又特立独行,充满智慧。从他这本自传中,我们知道他和乔布斯一样,大学都没读完就辍学做了一名图书封面设计师,然后创建了赞架(Xanga)网站,又进了谷歌。在经济上打了翻身仗后,他毅然放弃了安逸的生活,从零开始,和朋友创建了世界最知名的社交平台推特(Twitter)。当推特奇迹般地改变着世界时,他又悄然离去,创建了自......一起来看看 《一只小鸟告诉我的事》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

SHA 加密
SHA 加密

SHA 加密工具

html转js在线工具
html转js在线工具

html转js在线工具