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.v1Dé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 = trueFichier 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
...