Skip to content

go-ini

Dépôt : go-ini/ini: Package ini provides INI file read and write functionality in Go (github.com)

Documentation : go-ini/ini: Super bibliothèque Go pour la manipulation de fichiers INI (unknwon.cn)

Introduction

Bibliothèque d'analyse de fichiers ini écrite en Go, supportant la sérialisation et la désérialisation, le mappage de structures, et les opérations sur les commentaires.

Installation

go get gopkg.in/ini.v1

Démarrage rapide

Fichier ini

ini
# possible values : production, development
app_mode = development

[paths]
# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)
data = /home/git/grafana

[server]
# Protocol (http or https)
protocol = http

# The http port  to use
http_port = 9999

# Redirect to correct domain if host header does not match domain
# Prevents DNS rebinding attacks
enforce_domain = true

Fichier Go

go
package main

import (
    "fmt"
    "os"

    "gopkg.in/ini.v1"
)

func main() {
    cfg, err := ini.Load("my.ini")
    if err != nil {
        fmt.Printf("Échec de lecture du fichier: %v", err)
        os.Exit(1)
    }

    // Opération de lecture typique, la section par défaut peut être représentée par une chaîne vide
    fmt.Println("App Mode:", cfg.Section("").Key("app_mode").String())
    fmt.Println("Data Path:", cfg.Section("paths").Key("data").String())

    // Nous pouvons faire des opérations de restriction de valeurs candidates
    fmt.Println("Server Protocol:",
        cfg.Section("server").Key("protocol").In("http", []string{"http", "https"}))
    // Si la valeur lue n'est pas dans la liste des candidats, elle revient à la valeur par défaut fournie
    fmt.Println("Email Protocol:",
        cfg.Section("server").Key("protocol").In("smtp", []string{"imap", "smtp"}))

    // Essayons la conversion de type automatique
    fmt.Printf("Port Number: (%[1]T) %[1]d\n", cfg.Section("server").Key("http_port").MustInt(9999))
    fmt.Printf("Enforce Domain: (%[1]T) %[1]v\n", cfg.Section("server").Key("enforce_domain").MustBool(false))

    // C'est presque fini, modifions une valeur puis sauvegardons
    cfg.Section("").Key("app_mode").SetValue("production")
    cfg.SaveTo("my.ini.local")
}

Sortie

$ go run main.go
App Mode: development
Data Path: /home/git/grafana
Server Protocol: http
Email Protocol: smtp
Port Number: (int) 9999
Enforce Domain: (bool) true

$ cat my.ini.local
# possible values : production, development
app_mode = production

[paths]
# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)
data = /home/git/grafana
...

Golang by www.golangdev.cn edit