Go toml로.DecodeFile에 빠진 노트

2571 단어 GoTOML
182b65b9 539c 4d24 9b1f ee4a1a8756f1
토ML이라는 설정 파일의 미니 언어가 있는데 Go로 해봤는데 제대로 읽지 못하고 빠져서 적어놨어요.
config_test.go

package main

import (
    "github.com/BurntSushi/toml"
    "testing"
    "fmt"
)

type ConfToml struct {
    Keys SectionKeys toml:"keys"
}

type SectionKeys struct {
    Consumer_key string toml:"consumer_key"
    access_token string toml:"access_token"
}

// config の read
func readSettingsConfig(path string, config *ConfToml) {
    _, err := toml.DecodeFile(path, config)
    if err != nil {
        panic(err)
    }
}

func Test_readSettingsConfg(t *testing.T) {
    var conftoml ConfToml

_, err := toml.DecodeFile("config.toml", &conftoml) 
if err != nil {
    panic(err)
}

fmt.Println(conftoml.Keys)

// Printlnする為に、あえてerrorにしている。
if conftoml.Keys.Consumer_key != "aab" {
    t.Error("Not Match")
}
if conftoml.Keys.Consumer_key != "bbb" {
    t.Error("Not Match")
}


}

config.toml

[keys]
consumer_key = "aaa"
access_token = "bbb"
실행 결과

{aaa }
--- FAIL: Test_readSettingsConfg (0.00s)
        config_test.go:38: Not Match
        config_test.go:41: Not Match
FAIL
FAIL    command-line-arguments  0.005s
이 굵은 글꼴이 중점입니다. 이것은 Print가toml 파일로 읽은 구조체입니다. 단, aa라는 값만 저장된 상태입니다.
원래는 {aabbbb}이였어야 했는데.

type SectionKeys struct {
    Consumer_key string `toml:"consumer_key"`
    access_token string `toml:"access_token"`
}
이 Sectionkesy 구조체의 필드 이름은 소문자와 대문자에 따라 다르기 때문이다.
보아하니 DecodeFile의 필드 이름이 소문자라면 값을 설정하지 않을 것 같다.
※Access_토큰과 대문자로 설정하면 정확한 값이 설정됩니다.
아마,github.패키지 이외의 구조체에 접근 권한이 없기 때문이라고 생각합니다. (내보낼 수 없습니다.)
설정치가 없어서 싫다~ 싫다~ 무섭다~ 무섭다~ 빠져든다.
제가 사과했을지 모르니 많은 지도와 채찍질을 부탁드립니다.

사이트 축소판 그림


[개인 노트] 파일 형식에서 TOML을 설정하는 게 좋을 것 같아요.
Go 언어의 구조 설치 모드

좋은 웹페이지 즐겨찾기