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

青岛做外贸网站哪家好平面设计师和网页设计师哪个好

青岛做外贸网站哪家好,平面设计师和网页设计师哪个好,吴江和城乡建设局网站,百度网站首页入口实际项目中,要读取一些json等配置文件。今天就来说一说,Golang 是如何读取YAML,JSON,INI等配置文件的。 一. go读取json配置文件 JSON 应该比较熟悉,它是一种轻量级的数据交换格式。层次结构简洁清晰 ,易于阅读和编写&#xff0…

实际项目中,要读取一些json等配置文件。今天就来说一说,Golang 是如何读取YAML,JSON,INI等配置文件的。

一. go读取json配置文件

JSON 应该比较熟悉,它是一种轻量级的数据交换格式。层次结构简洁清晰 ,易于阅读和编写,同时也易于机器解析和生成。

  • 1.创建 conf.json:
{"enabled": true,"path": "/usr/local"
}
  • 2.新建config_json.go:
package mainimport ("encoding/json""fmt""os"
)type configuration struct {Enabled boolPath    string
}func main() {// 打开文件file, _ := os.Open("conf.json")// 关闭文件defer file.Close()//NewDecoder创建一个从file读取并解码json对象的*Decoder,解码器有自己的缓冲,并可能超前读取部分json数据。decoder := json.NewDecoder(file)conf := configuration{}//Decode从输入流读取下一个json编码值并保存在v指向的值里err := decoder.Decode(&conf)if err != nil {fmt.Println("Error:", err)}fmt.Println("path:" + conf.Path)
}

启动运行后,输出如下:

D:\Go_Path\go\src\configmgr>go run config_json.go
path:/usr/local

1.2 复杂json解析

假设test.json内容如下,如何解析?

{"pids":{"default":{"pid":"1844_71935560","desc":"app1"},"shehui":{"pid":"1844_101751664","desc":"app2"}},    "top_words":["邓紫棋",        "沈腾","关晓彤","鹿晗"]
}

通过json转struct工具转换:

Golang: Convert JSON to Struct

JSON-to-Go: Convert JSON to Go instantly

转化后的struct

type configuration struct {Pids struct {Default struct {Pid string `json:"pid"`Desc string `json:"desc"`} `json:"default"`Shehui struct {Pid string `json:"pid"`Desc string `json:"desc"`} `json:"shehui"`} `json:"pids"`TopWords []string `json:"top_words"`
}

demo实现:

package mainimport ("encoding/json""fmt""os"
)type configuration struct {Pids struct {Default struct {Pid  string `json:"pid"`Desc string `json:"desc"`} `json:"default"`Shehui struct {Pid  string `json:"pid"`Desc string `json:"desc"`} `json:"shehui"`} `json:"pids"`TopWords []string `json:"top_words"`
}func parseJsonConfig(filepath string) (conf configuration) {// 打开文件file, _ := os.Open(filepath)// 关闭文件defer file.Close()conf = configuration{}//NewDecoder创建一个从file读取并解码json对象的*Decoder,解码器有自己的缓冲,并可能超前读取部分json数据。//Decode从输入流读取下一个json编码值并保存在v指向的值里err := json.NewDecoder(file).Decode(&conf)if err != nil {fmt.Println("Error:", err)}return
}func main() {pdd := parseJsonConfig("D:\\LearnGo\\FirstGo\\10-文件操作\\test3.json")fmt.Println(pdd)fmt.Println(pdd.Pids.Shehui.Pid)}

再继续来个案例:

假设json文件内容如下,想读取top_words中name的值,要怎么解析获取?

{"pids":{"default":{"pid":"1844_71935560","desc":"app1"},"shehui":{"pid":"1844_101751664","desc":"app2"}},"top_words":[{"name": "cc","age": 18},{"name": "test","age": 20}]
}

demo实现

package mainimport ("encoding/json""fmt""os"
)type configuration1 struct {Pids struct {Default struct {Desc string `json:"desc"`Pid  string `json:"pid"`} `json:"default"`Shehui struct {Desc string `json:"desc"`Pid  string `json:"pid"`} `json:"shehui"`} `json:"pids"`TopWords []struct {Age  int64  `json:"age"`Name string `json:"name"`} `json:"top_words"`
}func parseJsonConfig1(filepath string) (conf configuration1) {// 打开文件file, _ := os.Open(filepath)// 关闭文件defer file.Close()conf = configuration1{}//NewDecoder创建一个从file读取并解码json对象的*Decoder,解码器有自己的缓冲,并可能超前读取部分json数据。//Decode从输入流读取下一个json编码值并保存在v指向的值里err := json.NewDecoder(file).Decode(&conf)if err != nil {fmt.Println("Error:", err)}return
}func main() {pdd := parseJsonConfig1("D:\\LearnGo\\FirstGo\\10-文件操作\\test4.json")fmt.Println(pdd)//遍历string切片获取name的值for _, i := range pdd.TopWords {		name := i.Namefmt.Println(name)}}

运行结果:

{{{app1 1844_71935560} {app2 1844_101751664}} [{18 cc} {20 test}]}
cc  
test

最后一个工作用到的案例:读取json文件中的规则,做正则匹配,这里没有进行匹配操作,后续用到加上

{"reverse_shell_rule":[{"id":"R10000","regex":"socat\\s+TCP4:\\w+\\.\\w+\\.\\w+\\.\\w+:(\\w+)\\s+.*"},{"id":"R10001","regex":"exec\\s+\\d+\\<\\>\/\\w+\/.*"}]
}

// 读取JSON文件 将内容转为结构对象 然后更改数据package mainimport ("encoding/json""fmt""io/ioutil"
)type ReverseJson struct {ReverseShellRule []struct {ID    string `json:"id"`Regex string `json:"regex"`} `json:"reverse_shell_rule"`
}func main() {var data ReverseJson// 读取JSON文件内容 返回字节切片bytes, _ := ioutil.ReadFile("D:\\LearnGo\\FirstGo\\10-文件操作\\test.json")// 打印时需要转为字符串fmt.Println(string(bytes))// 将字节切片映射到指定结构上json.Unmarshal(bytes, &data)//fmt.Println("*** unmarshal result: ***")// 打印对象结构for _, reg := range data.ReverseShellRule {rule := reg.Regexfmt.Println(rule)}}

二、 go读取.ini配置文件

INI文件格式是某些平台或软件上的配置文件的非正式标准,由节(section)和键(key)构成,比较常用于微软Windows操作系统中。这种配置文件的文件扩展名为INI。

  • 1.创建 conf.ini:
[Section]
enabled = true
path = /usr/local # another comment
  • 2.下载第三方库:go get gopkg.in/gcfg.v1
  • 3.新建 config_ini.go:
package mainimport ("fmt"gcfg "gopkg.in/gcfg.v1"
)func main() {config := struct {Section struct {Enabled boolPath    string}}{}err := gcfg.ReadFileInto(&config, "conf.ini")if err != nil {fmt.Println("Failed to parse config file: %s", err)}fmt.Println(config.Section.Enabled)fmt.Println(config.Section.Path)
}

启动运行后,输出如下:

D:\Go_Path\go\src\configmgr>go run config_ini.go
true
/usr/local

三、go读取yaml配置文件

yaml 可能比较陌生一点,但是最近却越来越流行,尤其在SpringBoot中的application.yml或者application.yaml中使用非常广泛。也就是一种标记语言。层次结构也特别简洁清晰 ,易于阅读和编写,同时也易于机器解析和生成。

golang的标准库中暂时没有给我们提供操作yaml的标准库,但是github上有很多优秀的第三方库开源给我们使用。

    1. 创建 conf.yaml:
enabled: true
path: /usr/local
  • 2.下载第三方库:go get gopkg.in/yaml.v2
  • 3.创建 config_yaml.go:
package mainimport ("fmt""io/ioutil""log""gopkg.in/yaml.v2"
)type conf struct {Enabled bool   `yaml:"enabled"` //yaml:yaml格式 enabled:属性的为enabledPath    string `yaml:"path"`
}func (c *conf) getConf() *conf {yamlFile, err := ioutil.ReadFile("conf.yaml")if err != nil {log.Printf("yamlFile.Get err   #%v ", err)}err = yaml.Unmarshal(yamlFile, c)if err != nil {log.Fatalf("Unmarshal: %v", err)}return c
}func main() {var c confc.getConf()fmt.Println("path:" + c.Path)
}

启动运行后,输出如下:

D:\Go_Path\go\src\configmgr>go run config_yaml.go
path:/usr/local

最后 以上,就把golang 读取配置文件的方法,都介绍完了。大家可以拿着代码运行起来看看。

参考资料:

Go 语言解析 JSON 文件 - 知乎 Go 语言解析 JSON 文件(推荐)

如何读取yaml,json,ini等配置文件【Golang 入门系列九】-腾讯云开发者社区-腾讯云

http://www.yayakq.cn/news/312081/

相关文章:

  • 共享网站的详细规划网站制作合肥
  • 大连住建部官方网站wordpress增加变量
  • 成都企业建网站天津制作网站首页
  • 石家庄住房建设厅网站公司网站一般找哪个公司做
  • 辽宁手机版建站系统信息档案网站建设对比
  • 规划网站的总结免费网站可以做淘宝客吗
  • 厦门行业网站建设新手如何入侵一个网站
  • 请别人做网站签订合同给个网站可以在线
  • 网站开发和运行 法律互联网行业发展
  • 用什么网站可以做链接seo外链软件
  • 摄影网站制作流程怎样建设一个能上传数据的网站
  • 网站建设i rsky网站备案说主体已注销
  • 门户类网站如何做策划门户网站有哪些
  • 老鹰画室网站哪家做的免费企业网站建立
  • 专业网站建设-好发信息网营销网站建设汉狮电话
  • 锦州做网站的公司wordpress管理用户插件
  • 阿里云如何添加新网站网站建设简单合同
  • 崇州企业网站建设交互比较好的网站
  • 南充网站建设工作室ps怎么做响应式网站布局图
  • 网站改版 重定向昆明网站建设-中国互联
  • seo撰写网站标题以及描述的案例汇编语言做网站
  • 高端文化网站模板公司视频宣传片
  • 深圳专业做网站设计传媒公司起名
  • 黑彩网站建设需要什么东西软件定制开发费用多少云鲸互创团队
  • php网站源代码上海发布官网app
  • 商务网站前台模板平面设计新手兼职接单
  • 网站建设实施计划wordpress批量发布
  • 用搬瓦工搭建wordpress两个相同的网站对做优化有帮助
  • 网页建站要多久科技软件公司网站模板下载
  • 安庆市重点工程建设局网站南海佛山网站建设