golang 如何在ini文件指定位置 写入字符串

Python023

golang 如何在ini文件指定位置 写入字符串,第1张

1、C语言标准库提供了一系列文件操作函数。文件操作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中。例如:fopen、fclose函数用于文件打开与关闭;fscanf、fgets函数用于文件读取;fprintf、fputs函数用于文件写入;ftell、fseek函数用于文件操作位置的获取与设置。一般的C语言教程都有文件操作一章,可以找本教材进一步学习。2、例程:

#include<stdio.h>int achar b,c[100]int main(){FILE * fp1 = fopen("input.ini", "r")//打开输入文件FILE * fp2 = fopen("output.ini", "w")//打开输出文件if (fp1==NULL || fp2==NULL) {//若打开文件失败则退出puts("不能打开文件!") rturn 0 }fscanf(fp1,"%d",&a)//从输入文件读取一个整数b=fgetc(fp1)//从输入文件读取一个字符fgets(c,100,fp1)//从输入文件读取一行字符串 printf("%ld",ftell(fp1))//输出fp1指针当前位置相对于文件首的偏移字节数 fputs(c,fp2)//向输出文件写入一行字符串fputc(b,fp2)//向输出文件写入一个字符fprintf(fp2,"%d",a)//向输出文件写入一个整数 fclose(fp1)//关闭输入文件fclose(fp2)//关闭输出文件,相当于保存return 0}

我以前用过一个,你看着合适可以拿去用。

特点是只读,而且不适合太大的文件(因为要全部加载到内存里)。

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"

}

go run 或者 go build后在配置目录的相对路径上执行

假设当前目录如下:

├─config

│ │ main.go

│ │

│ └─file // 配置文件目录

│ config.ini

也就是说无论你是go run或者build后的执行程序,都应该在你执行目录下

有该配置文件路径如file/config.ini

否则就会发生以下错误, 无法读取配置文件

panic: Error:can not read file "./file/config.ini"

使用绝对路径读取配置文件

如果配置文件动态的话, 具体怎么传入 配置文件路径

go-bindata 把配置文件打包进去

5.1 使用远程配置中心去读取配置