Skip to content

Commit a13773a

Browse files
committed
Add ini-file example (using go-ini)
1 parent f47f2fa commit a13773a

File tree

12 files changed

+295
-5
lines changed

12 files changed

+295
-5
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
config-updated.ini
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# https://taskfile.dev
2+
3+
version: '3'
4+
5+
tasks:
6+
default:
7+
cmds:
8+
- go run main.go
9+
- cmd: diff -u config.ini config-updated.ini
10+
ignore_error: true
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
[General]
2+
AppName = MyApplication
3+
Version = 1.0.0
4+
License = MIT
5+
6+
[Database]
7+
Host = localhost
8+
User = root
9+
Password =
10+
DatabaseName = my_database
11+
12+
[Logging]
13+
; ログレベル
14+
Level = DEBUG
15+
; ログファイル
16+
LogFile = /var/log/myapp.log
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package main
2+
3+
import "gopkg.in/ini.v1"
4+
5+
func main() {
6+
if err := run(); err != nil {
7+
panic(err)
8+
}
9+
}
10+
11+
func run() error {
12+
//
13+
// iniファイル読み込み
14+
//
15+
var (
16+
cfg *ini.File
17+
err error
18+
)
19+
20+
cfg, err = ini.Load("config.ini")
21+
if err != nil {
22+
return err
23+
}
24+
25+
//
26+
// 既存のキーの値を変更
27+
//
28+
cfg.Section("Database").Key("User").SetValue("gitpod")
29+
30+
//
31+
// 新しいセクションとキーの追加
32+
//
33+
newSection := cfg.Section("NewSection")
34+
newSection.Key("NewKey").SetValue("NewValue")
35+
36+
//
37+
// 書き出し
38+
//
39+
if err := cfg.SaveTo("config-updated.ini"); err != nil {
40+
return err
41+
}
42+
43+
return nil
44+
45+
/*
46+
$ task
47+
task: [default] go run main.go
48+
task: [default] diff -u config.ini config-updated.ini
49+
--- config.ini 2024-01-17 05:18:00.670661597 +0000
50+
+++ config-updated.ini 2024-01-17 05:19:09.686594430 +0000
51+
@@ -5,7 +5,7 @@
52+
53+
[Database]
54+
Host = localhost
55+
-User = root
56+
+User = gitpod
57+
Password =
58+
DatabaseName = my_database
59+
60+
@@ -14,3 +14,6 @@
61+
Level = DEBUG
62+
; ログファイル
63+
LogFile = /var/log/myapp.log
64+
+
65+
+[NewSection]
66+
+NewKey = NewValue
67+
*/
68+
69+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# https://taskfile.dev
2+
3+
version: '3'
4+
5+
tasks:
6+
default:
7+
cmds:
8+
- go run main.go
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
[General]
2+
AppName = MyApplication
3+
Version = 1.0.0
4+
License = MIT
5+
6+
[Database]
7+
Host = localhost
8+
User = root
9+
Password =
10+
DatabaseName = my_database
11+
12+
[Logging]
13+
; ログレベル
14+
Level = DEBUG
15+
; ログファイル
16+
LogFile = /var/log/myapp.log
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
6+
"gopkg.in/ini.v1"
7+
)
8+
9+
func main() {
10+
if err := run(); err != nil {
11+
panic(err)
12+
}
13+
}
14+
15+
func run() error {
16+
//
17+
// iniファイル読み込み
18+
//
19+
var (
20+
cfg *ini.File
21+
err error
22+
)
23+
24+
cfg, err = ini.Load("config.ini")
25+
if err != nil {
26+
return err
27+
}
28+
29+
//
30+
// セクション取得
31+
//
32+
var (
33+
secGeneral *ini.Section
34+
secDatabase *ini.Section
35+
secLogging *ini.Section
36+
)
37+
38+
secGeneral = cfg.Section("General")
39+
secDatabase = cfg.Section("Database")
40+
secLogging = cfg.Section("Logging")
41+
42+
//
43+
// キー取得
44+
//
45+
var (
46+
keyVersion *ini.Key
47+
keyHost *ini.Key
48+
keyLevel *ini.Key
49+
)
50+
51+
keyVersion = secGeneral.Key("Version")
52+
keyHost = secDatabase.Key("Host")
53+
keyLevel = secLogging.Key("Level")
54+
55+
//
56+
// 値取得
57+
// *ini.Keyにいろいろな型で値を取得するメソッドが用意されている
58+
//
59+
fmt.Printf("Version=%s\n", keyVersion.String())
60+
fmt.Printf("Host=%s\n", keyHost.MustString("unknown"))
61+
fmt.Printf("Level=%s (%s)\n", keyLevel.Value(), keyLevel.Comment)
62+
63+
return nil
64+
65+
/*
66+
$ task
67+
task: [default] go run main.go
68+
Version=1.0.0
69+
Host=localhost
70+
Level=DEBUG (; ログレベル)
71+
*/
72+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
config.ini
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# https://taskfile.dev
2+
3+
version: '3'
4+
5+
tasks:
6+
default:
7+
cmds:
8+
- go run main.go
9+
- cat config.ini
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package main
2+
3+
import "gopkg.in/ini.v1"
4+
5+
func main() {
6+
if err := run(); err != nil {
7+
panic(err)
8+
}
9+
}
10+
11+
func run() error {
12+
//
13+
// 空のiniファイルを用意
14+
//
15+
cfg := ini.Empty()
16+
17+
//
18+
// セクションの追加
19+
//
20+
var (
21+
secGeneral *ini.Section
22+
secDatabase *ini.Section
23+
secLogger *ini.Section
24+
)
25+
26+
secGeneral = cfg.Section("General")
27+
secDatabase = cfg.Section("Database")
28+
secLogger = cfg.Section("Logging")
29+
30+
//
31+
// キーと値の追加
32+
//
33+
secGeneral.NewKey("AppName", "MyApplication")
34+
secGeneral.NewKey("Version", "1.0.0")
35+
secGeneral.NewKey("License", "MIT")
36+
37+
secDatabase.NewKey("Host", "localhost")
38+
secDatabase.NewKey("User", "root")
39+
secDatabase.NewKey("Password", "")
40+
secDatabase.NewKey("DatabaseName", "my_database")
41+
42+
secLogger.NewKey("Level", "DEBUG")
43+
key, _ := secLogger.NewKey("LogFile", "/var/log/myapp.log")
44+
key.Comment = "ログファイル"
45+
46+
//
47+
// 書き出し
48+
//
49+
if err := cfg.SaveTo("config.ini"); err != nil {
50+
return err
51+
}
52+
53+
return nil
54+
55+
/*
56+
$ task
57+
task: [default] go run main.go
58+
task: [default] cat config.ini
59+
[General]
60+
AppName = MyApplication
61+
Version = 1.0.0
62+
License = MIT
63+
64+
[Database]
65+
Host = localhost
66+
User = root
67+
Password =
68+
DatabaseName = my_database
69+
70+
[Logging]
71+
Level = DEBUG
72+
; ログファイル
73+
LogFile = /var/log/myapp.log
74+
*/
75+
}

0 commit comments

Comments
 (0)