当前位置: 首页 > news >正文

网站的产品上传图片oa系统的概念

网站的产品上传图片,oa系统的概念,娜娜视频免费视频在线,河南建筑公司排名目录 viper简介 viper使用 通过viper.Set设置值 读取配置文件说明 读取配置文件 读取多个配置文件 读取配置项的值 读取命令行的值 io.Reader中读取值 写配置文件 WriteConfig() 和 SafeWriteConfig() 区别: viper简介 配置管理解析库#xff0c;是由大神 Steve Fr…目录 viper简介 viper使用 通过viper.Set设置值 读取配置文件说明 读取配置文件 读取多个配置文件 读取配置项的值 读取命令行的值 io.Reader中读取值 写配置文件 WriteConfig() 和 SafeWriteConfig() 区别: viper简介 配置管理解析库是由大神 Steve Francia 开发他在google领导着 golang 的产品开发他也是 gohugo.io 的创始人之一命令行解析库 cobra 开发者。总之他在golang领域是专家很牛的一个人。 viper是一个配置管理的解决方案它能够从 jsontomliniyamlhclenv 等多种格式文件中读取配置内容它还能从一些远程配置中心读取配置文件如consuletcd等它还能够监听文件的内容变化。 功能介绍 读取 jsontomliniyamlhclenv 等格式的文件内容读取远程配置文件如 consuletcd 等和监控配置文件变化读取命令行 flag 的值从 buffer 中读取值 配置文件又可以分为不同的环境比如devtestprod等。读取配置文件的优先顺序从高到低如下 显式设置的Set函数命令行参数环境变量配置文件远程k-v 存储系统如consuletcd等默认值 Viper 配置key是不区分大小写的。 其实上面的每一种文件格式都有一些比较有名的解析库如 toml GitHub - BurntSushi/toml: TOML parser for Golang with reflection.json json的解析库比较多下面列出几个常用的 https://github.com/json-iterator/goGitHub - mailru/easyjson: Fast JSON serializer for golang.GitHub - bitly/go-simplejson: a Go package to interact with arbitrary JSONGitHub - tidwall/gjson: Get JSON values quickly - JSON parser for Goini : GitHub - go-ini/ini: Package ini provides INI file read and write functionality in Go 等等单独文件格式解析库。 但是为什么要用viper因为它是一个综合文件解析库包含了上面所有的文件格式解析是一个集合体少了配置多个库的烦恼。 viper使用 安装viper命令 go get github.com/spf13/viper 文档: viper/README.md at master · spf13/viper · GitHub 通过viper.Set设置值 如果某个键通过viper.Set设置了值那么这个值读取的优先级最高 viper.Set(mysql.info, this is mysql info) 同时还可以设置默认值 viper.SetDefault(ContentDir, content) viper.SetDefault(LayoutDir, layouts) viper.SetDefault(Taxonomies, map[string]string{tag: tags, category: categories}) 读取配置文件说明 读取配置文件要求最少要知道从哪个位置查找配置文件。用户一定要设置这个路径。viper可以从多个路径搜索配置文件单个viper实例只支持单个配置文件。viper本身没有设置默认的搜索路径需要用户自己设置默认路径。 viper.SetConfigName(config) // 配置文件的文件名没有扩展名如 .yaml, .toml 这样的扩展名 viper.SetConfigType(yaml) // 设置扩展名。在这里设置文件的扩展名。另外如果配置文件的名称没有扩展名则需要配置这个选项 viper.AddConfigPath(/etc/appname/) // 查找配置文件所在路径 viper.AddConfigPath($HOME/.appname) // 多次调用AddConfigPath可以添加多个搜索路径 viper.AddConfigPath(.) // 还可以在工作目录中搜索配置文件 err : viper.ReadInConfig() // 搜索并读取配置文件 if err ! nil { // 处理错误 panic(fmt.Errorf(Fatal error config file: %s \n, err)) } 说明         这里执行viper.ReadInConfig()之后viper才能确定到底用哪个文件viper按照上面的AddConfigPath() 进行搜索找到第一个名为 config.ext (这里的ext代表扩展名 如 json,toml,yaml,yml,ini,prop 等扩展名) 的文件后即停止搜索。 如果有多个名称为config的配置文件viper怎么搜索呢它会按照如下顺序搜索 config.jsonconfig.tomlconfig.yamlconfig.ymlconfig.properties (这种一般是java中的配置文件名)config.props (这种一般是java中的配置文件名) 你还可以处理一些特殊情况 if err : viper.ReadInConfig(); err ! nil { if _, ok : err.(viper.ConfigFileNotFoundError); ok { // 配置文件没有找到; 如果需要可以忽略 } else { // 查找到了配置文件但是产生了其它的错误 } } // 查找到配置文件并解析成功 注意[自1.6起]  你也可以有不带扩展名的文件并以编程方式指定其格式。对于位于用户$HOME目录中的配置文件没有任何扩展名如.bashrc。 读取配置文件 config.toml 配置文件 # this is a toml title toml exaples redis 127.0.0.1:3300 # redis [mysql] host 192.168.1.1 ports 3306 username root password root123456 package main import( fmt github.com/spf13/viper ) // 读取配置文件 config type Config struct { Redis string MySQL MySQLConfig } type MySQLConfig struct { Port int Host string Username string Password string } func main() { // 把配置文件读取到结构体上 var config Config viper.SetConfigName(config) viper.AddConfigPath(.) err : viper.ReadInConfig() if err ! nil { fmt.Println(err) return } viper.Unmarshal(config) //将配置文件绑定到config上 fmt.Println(config: , config, redis: , config.Redis) } 读取多个配置文件 在例子1基础上多增加一个json的配置文件config3.json 配置文件 { redis: 127.0.0.1:33000, mysql: { port: 3306, host: 127.0.0.1, username: root, password: 123456 } } package main import ( fmt github.com/spf13/viper ) type Config struct { Redis string MySQL MySQLConfig } type MySQLConfig struct { Port int Host string Username string Password string } func main() { // 读取 toml 配置文件 var config1 Config vtoml : viper.New() vtoml.SetConfigName(config) vtoml.SetConfigType(toml) vtoml.AddConfigPath(.) if err : vtoml.ReadInConfig(); err ! nil { fmt.Println(err) return } vtoml.Unmarshal(config1) fmt.Println(read config.toml) fmt.Println(config: , config1, redis: , config1.Redis) // 读取 json 配置文件 var config2 Config vjson : viper.New() vjson.SetConfigName(config3) vjson.SetConfigType(json) vjson.AddConfigPath(.) if err : vjson.ReadInConfig(); err ! nil { fmt.Println(err) return } vjson.Unmarshal(config2) fmt.Println(read config3.json) fmt.Println(config: , config1, redis: , config1.Redis) } 运行 $ go run viper_multi.go read config.toml config:  {127.0.0.1:33000 {0 192.168.1.1 root 123456}} redis:  127.0.0.1:33000 read config3.json config:  {127.0.0.1:33000 {0 192.168.1.1 root 123456}} redis:  127.0.0.1:33000 读取配置项的值 新建文件夹 item 在里面创建文件 config.json内容如下 { redis: 127.0.0.1:33000, mysql: { port: 3306, host: 127.0.0.1, username: root, password: 123456, ports: [ 5799, 6029 ], metric: { host: 127.0.0.1, port: 2112 } } } package mainimport (fmtgithub.com/spf13/viper )func main() {viper.SetConfigName(config) // 配置文件名称不包括扩展名viper.SetConfigType(json) // 配置文件类型viper.AddConfigPath(.) // 配置文件搜索路径// 根据配置加载文件err : viper.ReadInConfig()if err ! nil {fmt.Println(err)return}// 读取配置项host : viper.Get(mysql.host)username : viper.GetString(mysql.username)port : viper.GetInt(mysql.port)portsSlice : viper.GetIntSlice(mysql.ports)metricPort : viper.GetInt(mysql.metric.port)redis : viper.Get(redis)mysqlMap : viper.GetStringMapString(mysql)// 检查配置项是否设置if viper.IsSet(mysql.host) {fmt.Println([IsSet()] mysql.host is set)} else {fmt.Println([IsSet()] mysql.host is not set)}// 打印配置信息fmt.Println(mysql - host:, host, , username:, username, , port:, port)fmt.Println(mysql ports:, portsSlice)fmt.Println(metric port:, metricPort)fmt.Println(redis -, redis)fmt.Println(mysqlmap -, mysqlMap, , username:, mysqlMap[username]) } 运行 $ go run viper_get_item.go [IsSet()]mysql.host is set mysql - host:  127.0.0.1 , username:  root , port:  3306 mysql ports : [5799 6029] metric port:  2112 redis -  127.0.0.1:33000 mysqlmap -  map[host:127.0.0.1 metric: password:123456 port:3306 ports: username:root] , username:  root 读取命令行的值 viper获取值的方法 Get(key string) : interface{}GetBool(key string) : boolGetFloat64(key string) : float64GetInt(key string) : intGetIntSlice(key string) : []intGetString(key string) : stringGetStringMap(key string) : map[string]interface{}GetStringMapString(key string) : map[string]stringGetStringSlice(key string) : []stringGetTime(key string) : time.TimeGetDuration(key string) : time.DurationIsSet(key string) : boolAllSettings() : map[string]interface{} 新建文件夹 cmd然后cmd文件夹里新建config.json文件 { redis:{ port: 3301, host: 127.0.0.1 }, mysql: { port: 3306, host: 127.0.0.1, username: root, password: 123456 } } package mainimport (fmtgithub.com/spf13/pflaggithub.com/spf13/viper )func main() {// 使用pflag定义命令行参数pflag.Int(redis.port, 3302, redis port)viper.BindPFlags(pflag.CommandLine) // 将pflag绑定到viperpflag.Parse() // 解析命令行参数// 使用viper加载配置文件viper.SetConfigName(config) // 配置文件名称不包括扩展名viper.SetConfigType(json) // 配置文件类型viper.AddConfigPath(.) // 配置文件搜索路径// 根据配置加载文件err : viper.ReadInConfig()if err ! nil {fmt.Println(err)return}// 读取配置项host : viper.Get(mysql.host)username : viper.GetString(mysql.username)port : viper.GetInt(mysql.port)redisHost : viper.GetString(redis.host)redisPort : viper.GetInt(redis.port)// 打印配置信息fmt.Println(mysql - host:, host, , username:, username, , port:, port)fmt.Println(redis - host:, redisHost, , port:, redisPort) } 1.不加命令行参数运行 $ go run viper_pflag.go mysql - host:  127.0.0.1 , username:  root , port:  3306 redis - host:  127.0.0.1 , port:  3301 说明redis.port 的值是 3301是 config.json 配置文件里的值。 2.加命令行参数运行 $ go run viper_pflag.go --redis.port 6666 mysql - host:  127.0.0.1 , username:  root , port:  3306 redis - host:  127.0.0.1 , port:  6666 说明加了命令行参数 --redis.port 6666这时候redis.port输出的值为 6666读取的是cmd命令行的值 io.Reader中读取值 package mainimport (bytesfmtgithub.com/spf13/viper )func main() {viper.SetConfigType(yaml) // 设置配置文件类型为yaml// 定义YAML配置内容var yaml []byte(Hacker: true name: steve hobbies: - skateboarding - snowboarding - go clothing:jacket: leathertrousers: denim age: 35 eyes: brown beard: true)// 从字节切片中读取配置err : viper.ReadConfig(bytes.NewBuffer(yaml))if err ! nil {fmt.Println(err)return}// 读取配置项hacker : viper.GetBool(Hacker)hobbies : viper.GetStringSlice(hobbies)jacket : viper.Get(clothing.jacket)age : viper.GetInt(age)// 打印配置信息fmt.Println(Hacker:, hacker, , hobbies:, hobbies, , jacket:, jacket, , age:, age) } 写配置文件 package mainimport (fmtgithub.com/spf13/viper )func main() {viper.SetConfigName(config) // 设置配置文件名称不包括扩展名viper.SetConfigType(yaml) // 设置配置文件类型为yamlviper.AddConfigPath(.) // 添加配置文件搜索路径// 直接设置配置项viper.Set(yaml, this is an example of yaml)viper.Set(redis.port, 4405)viper.Set(redis.host, 127.0.0.1)viper.Set(mysql.port, 3306)viper.Set(mysql.host, 192.168.1.0)viper.Set(mysql.username, root123)viper.Set(mysql.password, root123)// 将配置写入文件if err : viper.WriteConfig(); err ! nil {fmt.Println(err)} } 运行 $ go run viper_write_config.go 没有任何输出表示生成配置文件成功 WriteConfig() 和 SafeWriteConfig() 区别: 如果待生成的文件已经存在那么SafeWriteConfig()就会报错Config File config.yaml Already Exists 而WriteConfig()则会直接覆盖同名文件。
http://www.dnsts.com.cn/news/82444.html

相关文章:

  • 淘宝客网站开发 猪八戒网站界面大小
  • 门户网站开发工具软件极简wordpress主题
  • 无锡知名网站wordpress开源主题
  • 电子商务企业网站策划建设网站投资多少钱
  • 网站基本信息设置济南房产网安居客
  • 多个域名指向同一个网站南宁百度关键词推广
  • 职业学校查询网站文化创意产品设计
  • 网站和网页的区别市桥网站建设哪家好
  • 网站建设公司运营经验河北建造师网
  • 合网站 - 百度手游app开发公司
  • 嘉兴的信息公司网站wordpress去版权
  • 到哪个网站做任务学校网站模板 中文
  • 门户网站的建设和管理情况自查开源社区的发展前景
  • 找公司建网站网址申请注册方法
  • 长沙新能源建站补贴宁波南部商务区网站建设
  • 做网站需要考虑哪些问题app排版网站
  • 建设个读书网站大约需要投入多少钱云网站注册
  • 大作设计网站官网登录入口wordpress微信登录申请
  • 常用网站开发语言搜索引擎优化排名技巧
  • 中国广东手机网站建设上海公司排名大全
  • 网站下载的app删除了怎么找到杭州响应式网站案例
  • 娄底企业网站建设制作连锁加盟网络营销公司
  • 重庆整合网络营销之整站优化wordpress小蜜蜂
  • 国际金融资讯做的好的网站手机评测哪个网站做的好点
  • 山东恒昆建设工程有限公司网站北京网站建设价格行情
  • 开发网站要注意什么哪些网站可以进行域名注册
  • 网站建设套模板视频海外电商平台
  • 免费网站是网站设网站设计
  • 专业类网站品牌宝网站认证
  • 网站服务器怎么建设网络营销毕业后做什么工作