post Image
golangで設定記述にTOMLを使う

golangでの設定記述言語はYAMLの他にTOMLも人気があるようです。

(2016/7/28時点)

TOMLはdein.vimのプラグイン記述でも使われていますし、
YAMLに比べシンプルかつ、tomlライブラリの方が親切そうなので、TOMLを使用しています。

使い方

TOMLの仕様に沿って記述しますが、簡単な設定であればシンプルに記述できます。

[API]
port     = 8000
version  = "v1"
endpoint = "api.example.com"
debug    = true

golangのコード側では、コンフィグファイルに対応したstructを定義します。

package main

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

type Config struct {
    API APIConfig
}

type APIConfig struct {
    Port     uint
    Version  string
    Endpoint string
    Debug    bool
}

var config Config
_, err := toml.DecodeFile("config.toml", &config)
if err != nil {
    // Error Handling
}

fmt.Println("port:", config.API.port) //=> 8000

tomlファイルに[]で指定した名称と、代入する構造体のメンバの名称は揃えます。
golangがCamelCaseなのでtomlもCamelCaseになります。頭文字は問われないようです。

おおもと(ここではConfig)以下の構造体の名称はTOML側では記述されません。

Arrayになるケース

テストケースのリクエストをTOMLで書く場合等にArrayを使いたくなると思います。
TOMLは[[]]でArray要素を記述できます。
例として検索を行うAPIのテストケースを記述すると以下のようになります。

package test

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

type TestCases struct {
    InvalidUserNameCases   []RequestParameter
    InvalidSearchWordCases []RequestParameter
}

type RequestParameter struct {
    UserName   string `url:"user_name"`
    SearchWord string `url:"search_word"`
}

var testCases TestCases
_, err := toml.DecodeFile("test_cases.toml", &testCases)
if err != nil {
    // Error Handling
}

[[InvalidUserNameCases]]
userName   = "$dollar"
searchWord = "searchWord"

[[InvalidUserNameCases]]
userName   = "%percent"
searchWord = "searchWord"


[[InvalidSearchWordCases]]
userName   = "user"
searchWord = ""

[[InvalidSearchWordCases]]
userName   = "user"
searchWord = "forbiddenWord"

基本は上記と同様に、TOMLに記載するArrayになる要素の名称と、おおもとの構造体のメンバの名称を揃えます。
この際、該当のメンバの型を、各要素の値に対応した構造体のArrayにします。

実態は普通の構造体なので、tag等も普通に使えます。
構造体をクエリストリングに変換するgoogle/go-querystringurlタグも正常に動作します。

参考

tomlについては以下で詳しく説明されています。


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。