/dev/null

(◞‸◟)

【Go】structにデフォルトの値を設定したい

Golangでstructを生成するときにこのフィールドは特定の値で初期化してほしい、みたいな場合があります。

例えば検索に使うパラメーターオブジェクトのような。

package main

import "fmt"

// sturct
type UrlParam struct {
    Keyword string
    Format string
}


func main() {
    param := UrlParam{}
    param.Keyword = "golang"
    param.Format = "json"
    fmt.Println(param)
}

Keywordは都度設定したいですが、formatに関してはデフォルトがjsonになっていてほしい。 変えたければxmlとか指定したい。

intなどは0で初期化されますが、stringの場合は空文字列です。

こういう場合は普通にコンストラクタっぽいものを作れば良い。

func NewParam (keyword string) * UrlParam {
    u := new(UrlParam)
    u.Format = "json"
    u.Keyword = keyword
    return u
}

構造体のフィールドの数が少なければこういう方が簡潔

func NewParam2 (keyword string) *UrlParam {
    return &UrlParam{keyword, "json"}
}

ポインタじゃないのが欲しければこう

func makeParam(keyword string) UrlParam {
    return UrlParam{keyword, "json"}
}

当たり前のことは当たり前に書けば良さそう。