Golang ini 파일 읽고 쓰는 ini 라이브러리 알아보기

오늘은 Golang으로 설정파일인 INI 파일 포맷을 읽고 쓸 수 있는 ini 라이브러리를 알아보려 합니다.

ini 설치

우선 Golang의 환경을 구성하기 위해 https://golang.org/dl/ 에서 윈도우, 리눅스, 맥에서 설치 프로그램을 내려받을 수 있습니다.

맥에서 brew로 쉽게 설치할 수 있습니다.

brew install go

우분투에서도 apt로 쉽게 설치할 수 있습니다.

sudo apt-get install golang-go

go get으로 ini 패키지를 설치합니다.

go get gopkg.in/ini.v1

홈의 go 폴더에 ini 소스코드와 패키지 파일이 생성됩니다.

예제

package main

해당 소스코드를 실행 파일로 인식하게 해주도록 main이라고 선언합니다.

import (
	"fmt"
	"time"

	"gopkg.in/ini.v1"
)

fmt와 time 그리고 ini를 가져옵니다.

func main() {
	cfg, err := ini.Load("setting.ini")

setting.ini 파일의 내용을 불러옵니다.

	if err != nil {
		panic(err)
	}

예외처리를 합니다.

	Bool, err := cfg.Section("types").Key("Bool").Bool()
	String := cfg.Section("types").Key("String").String()
	Int, err := cfg.Section("types").Key("Int").Int()
	Uint, err := cfg.Section("types").Key("Uint").Uint()
	TimeFormat, err := cfg.Section("types").Key("TimeFormat").TimeFormat(time.RFC3339)
	Time, err := cfg.Section("types").Key("Time").Time()

각종 타입으로 가져올 수 있습니다.

	MustString := cfg.Section("Must").Key("MustString").MustString("default")
	MustBool := cfg.Section("Must").Key("MustBool").MustBool(true)
	MustInt := cfg.Section("Must").Key("MustInt").MustInt(10)
	MustUint := cfg.Section("Must").Key("MustUint").MustUint(10)
	MustTimeFormat := cfg.Section("Must").Key("MustTimeFormat").MustTimeFormat(time.RFC3339, time.Now())
	MustTime := cfg.Section("Must").Key("MustTime").MustTime(time.Now())

각종 타입으로 가져올 때에 기본 값을 지정할 수 있습니다.

	In := cfg.Section("InTypes").Key("In").In("default", []string{"one", "two", "three"})
	InInt := cfg.Section("InTypes").Key("InInt").InInt(0, []int{10, 20, 30})

선택해서 가져올 수 있습니다.

	RangeInt := cfg.Section("Range").Key("RangeInt").RangeInt(1, 0, 20)

시작과 최소, 최대값을 정하여 범위로 가져올 수 있습니다.

	Strings := cfg.Section("delimiter").Key("Strings").Strings(",")
	Ints := cfg.Section("delimiter").Key("Ints").Ints(",")
	Uints := cfg.Section("delimiter").Key("Uints").Uints(",")
	Times := cfg.Section("delimiter").Key("Times").Times(",")

각종 타입으로 구분자로 분리하여 가져올 수 있습니다.

	ValidInts := cfg.Section("Valid").Key("ValidInts").ValidInts(",")
	ValidTimes := cfg.Section("Valid").Key("ValidTimes").ValidTimes(",")

타입을 검사해서 원하는 타입만 골라서 가져올 수 있습니다.

	StrictInts, err := cfg.Section("Strict").Key("INTS").StrictInts(",")

특정 타입외의 다른 타입이 들어오면 오류를 발생시킬 수 있습니다.

	fmt.Print(Bool, String, Int, Uint, TimeFormat, Time,
		MustString, MustBool, MustInt, MustUint, MustTimeFormat, MustTime,
		In, InInt, RangeInt, Strings, Ints, Uints, Times,
		ValidInts, ValidTimes, StrictInts)

출력하여 setting.ini의 내용을 확인할 수 있습니다.

	cfg.Section("").Key("Write_Value").SetValue("SetValue")
	cfg.SaveTo("setiing.ini.local")
}

ini 파일에 값을 쓸 수도 있습니다.

설정 파일

본 포스팅은 아래와 같이 설정 파일을 작성하고 진행하였습니다.

Write_Value = SetValue

[types]
Bool       = true
String     = hello
Float64    = 1
Int        = 1
Uint       = 1
TimeFormat = 2019-08-10T20:00:00+09:00
Time       = 2019-08-10T20:00:00+09:00

[Must]
MustString     = default
MustBool       = true
MustInt        = 10
MustUint       = 3
MustTimeFormat = 2019-08-10T22:29:57+09:00
MustTime       = 2019-08-10T22:29:57+09:00

[InTypes]
In    = one
InInt = 10

[Range]
RangeInt = 5

[delimiter]
Strings = hello,world
Ints    = 1,2,3
Uints   = 1,2,3
Times   = 2019-08-10T22:29:57+09:00,2019-08-11T22:29:57+09:00

[Valid]
ValidInts  = hello,world,1,2
ValidTimes = 2019-08-10T22:29:57+09:00 , 0001-00-00

[Strict]
INTS = 1,2,3,hello

Written on August 10, 2019