golang 解析配置文件

我以前用过一个,你看着合适可以拿去用。
特点是只读,而且不适合太大的文件(因为要全部加载到内存里)。
package ini

import (
"bufio"
"io"
"os"
"strconv"
"strings"
)

type section map[string]string

type File struct {
sections map[string]section
}

func NewFile(path string) (*File, error) {
f, err := os.Open(path)
if err != nil {
return nil, err
}
defer f.Close()
return New(f), nil
}

func New(f io.Reader) *File {
m := make(map[string]section)
r := bufio.NewReader(f)
sec := ""
var line string
var err error
for err == nil {
line, err = r.ReadString(\n)
line = strings.TrimSpace(line)
if line == "" || line[0] == ; {
continue
}
if line[0] == [ && line[len(line)-1] == ] {
sec = line[1 : len(line)-1]
_, ok := m[sec]
if !ok {
m[sec] = make(section)
}
continue
}
if sec == "" {
continue
}
pair := strings.SplitN(line, "=", 2)
if len(pair) != 2 {
continue
}
key := strings.TrimSpace(pair[0])
val := strings.TrimSpace(pair[1])
if key == "" || val == "" {
continue
}
m[sec][key] = val
}
return &File{m}
}

func (p *File) Sections() []string {
s := make([]string, len(p.sections))
i := 0
for k, _ := range p.sections {
s[i] = k
i++
}
return s
}

func (p *File) HasSection(section string) bool {
_, ok := p.sections[section]
return ok
}

func (p *File) Keys(sec string) []string {
m, ok := p.sections[sec]
if !ok {
return nil
}
keys := make([]string, len(m))
i := 0
for key, _ := range m {
keys[i] = key
i++
}
return keys
}

func (p *File) GetString(sec, key, def string) string {
m, ok := p.sections[sec]
if !ok {
return def
}
v, ok := m[key]
if !ok {
return def
}
return v
}

func (p *File) GetInt(sec, key string, def int) int {
m, ok := p.sections[sec]
if !ok {
return def
}
v, ok := m[key]
if !ok {
return def
}
i, err := strconv.ParseInt(v, 10, 32)
if err != nil {
return def
}
return int(i)
}

func (p *File) GetUint(sec, key string, def uint) uint {
m, ok := p.sections[sec]
if !ok {
return def
}
v, ok := m[key]
if !ok {
return def
}
i, err := strconv.ParseUint(v, 10, 32)
if err != nil {
return def
}
return uint(i)
}

func (p *File) GetBool(sec, key string, def bool) bool {
m, ok := p.sections[sec]
if !ok {
return def
}
v, ok := m[key]
if !ok {
return def
}
return v != "0"
}
假面强还是黄金杯 贺文与邓家 python图像 os 6es73317kf020ab0接线 森林系婚礼布置图片 达州高铁规划最新消息| i5 4300u 核显 重启服务器上的tomcat akita是什么牌子 突击者之眼和火力 西安租车网价目表车型 2018年晋宁区重点工程 橱柜设计师待遇 pvc和丁腈橡胶 斗罗大陆之七怪后代txt 月季简笔画图片大全 常山紫港中学地址 MaLi 孙子兵法论文3000字 qq号价值查询官网 东莞梵歌瑜伽学院 160男生夏天穿衣搭配 青冈漫画商城燕子 kounmpo 平凡的世界1-54章概括 衢州博物馆是免费的吗 虾稻共养水稻不养花 空腹血糖6.9 质量让步放行的格式怎样写 zdqc歌曲

Copyright 资料库 Some Rights Reserved

如反馈或投诉等情况联系:une35498#163.com