当前位置: 首页 > 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/775727/

相关文章:

  • 肇庆网站建设公司哪个好优化网站做内链接
  • 中盛腾龙建设工程有限公司网站百度优化 几个网站内容一样
  • 英德住房和城乡建设部网站wordpress双栏主题
  • 产品包装设计素材网站软件开发流程书籍
  • 广告网站开发背景有什么网站可以做家教
  • 自己做的网站加载不出验证码青岛外贸网站设计
  • 网站排名突然消失google adwords关键词工具
  • 做外贸网站要注意什么app开发用什么软件
  • 网站如何paypal支付方式电子贺卡怎么制作
  • 建设银行网站查询网页字体网站
  • wordpress 建门户网站查手表的app哪个好用
  • 在网站怎么做代销页面排版
  • 怎么做文学动漫网站百度官方
  • 免费开源网站模板小型培训机构网站开发毕业设计
  • 济南企业网站推广方法找客户网
  • 代做网站公司免费xyz域名注册
  • 网站群维护方案上海网页制作报价
  • 中企高呈建设网站学校网站设计的作用
  • 网站国内空间价格微博推广价格表
  • 描述网站建设的基本流程php学建网站
  • 石大远程网页设计及网站建设答案iis 部署wordpress
  • 自助建站好吗网站建设技术合作合同
  • 正在建设的网站可以随时进入吗端州网站建设
  • 最好建站网站wordpress无法连接ftp服务器
  • 怎么申请自己的网站手机网站做seo
  • 网站建设教程 湖南岚鸿开网店流程图文详解
  • 温州网站优化搜索肇庆网站搜索排名
  • 珠宝网站方案做网站办公照片
  • 课程网站建设的背景如何申请网站
  • 网站建设怎么支付款项wordpress头像缓存插件